/**
 *
 */
import OpenApi;
import OpenApi.OpenApiUtil;

extends OpenApi;


init(config: OpenApiUtil.Config){
  super(config);
  @endpointRule = 'regional';
  
  checkConfig(config);
  @endpoint = getEndpoint('ehpc', @regionId, @endpointRule, @network, @suffix, @endpointMap, @endpoint);
}

function getEndpoint(productId: string, regionId: string, endpointRule: string, network: string, suffix: string, endpointMap: map[string]string, endpoint: string) throws: string{
  if (!$isNull(endpoint)) {
    return endpoint;
  }
  
  if (!$isNull(endpointMap) && !$isNull(endpointMap[regionId])) {
    return endpointMap[regionId];
  }
  return OpenApiUtil.getEndpointRules(productId, regionId, endpointRule, network, suffix);
}

model AddExistedNodesRequest {
  clusterId?: string(name='ClusterId', description='The ID of the cluster.

You can call the [ListClusters](https://help.aliyun.com/document_detail/87116.html) operation to query the cluster ID.

This parameter is required.', example='ehpc-hz-FYUr32****'),
  imageId?: string(name='ImageId', description='The ID of the image that is specified for the compute nodes. The image must meet the following requirements:

*   The operating system that is specified for the image must be the same as that of the existing cluster nodes. For example, if the operating system of the cluster nodes is CentOS, you can select only a CentOS image.

>  If you add nodes to a hybrid cloud cluster that supports multiple operating systems, you can select a Windows Server image or a CentOS image when the operating system of the cluster nodes is Windows.

*   The major version of the image specified for the compute nodes that you want to add must be the same as that of the image of the cluster. For example, if the version of the cluster image is CentOS 7.x, the version of the image specified for the compute nodes must be CentOS 7.x.

You can call the [ListImages](https://help.aliyun.com/document_detail/87213.html) and [ListCustomImages](https://help.aliyun.com/document_detail/87215.html) operations to query the image ID.

This parameter is required.', example='centos_7_06_64_20G_alibase_20190711.vhd'),
  imageOwnerAlias?: string(name='ImageOwnerAlias', description='The type of the images. Valid values:

*   system: public image.
*   self: custom image
*   others: shared image
*   marketplace: Alibaba Cloud Marketplace image

Default value: system.

This parameter is required.', example='system'),
  instance?: [ 
    {
      id?: string(name='Id', description='The Nth node ID. N starts from 1. Valid values: 1 to 100.

This parameter is required.', example='i-bp16mxn6mt3t7ftk****'),
    }
  ](name='Instance', description='The information about the node that you want to add.

This parameter is required.'),
  jobQueue?: string(name='JobQueue', description='The queue in the cluster to which the node is to be added.', example='workq'),
}

model AddExistedNodesResponseBody = {
  requestId?: string(name='RequestId', description='The request ID.', example='04F0F334-1335-436C-A1D7-6C044FE7****'),
  taskId?: string(name='TaskId', description='The task ID.', example='04F0F334-1335-436C-A1D7-6C044FE7****'),
}

model AddExistedNodesResponse = {
  headers?: map[string]string(name='headers'),
  statusCode?: int32(name='statusCode'),
  body?: AddExistedNodesResponseBody(name='body'),
}

/**
 * @summary Adds one or more existing ECS instances as compute nodes to a specified cluster.
 *
 * @description *   The compute nodes to be added are in the Stopped state.
 * *   After the compute nodes are added to the cluster, the operating systems of the nodes are replaced with the operating system specified by the ImageId parameter.
 * *   The hosts of the compute nodes must be different from those of the existing compute nodes in the cluster. Otherwise, the add operation fails.
 *
 * @param request AddExistedNodesRequest
 * @param runtime runtime options for this request RuntimeOptions
 * @return AddExistedNodesResponse
 */
async function addExistedNodesWithOptions(request: AddExistedNodesRequest, runtime: $RuntimeOptions): AddExistedNodesResponse {
  request.validate();
  var query = OpenApiUtil.query(request.toMap());
  var req = new OpenApiUtil.OpenApiRequest{ 
    query = OpenApiUtil.query(query),
  };
  var params = new OpenApiUtil.Params{
    action = 'AddExistedNodes',
    version = '2018-04-12',
    protocol = 'HTTPS',
    pathname = '/',
    method = 'GET',
    authType = 'AK',
    style = 'RPC',
    reqBodyType = 'formData',
    bodyType = 'json',
  };
  return callApi(params, req, runtime);
}

/**
 * @summary Adds one or more existing ECS instances as compute nodes to a specified cluster.
 *
 * @description *   The compute nodes to be added are in the Stopped state.
 * *   After the compute nodes are added to the cluster, the operating systems of the nodes are replaced with the operating system specified by the ImageId parameter.
 * *   The hosts of the compute nodes must be different from those of the existing compute nodes in the cluster. Otherwise, the add operation fails.
 *
 * @param request AddExistedNodesRequest
 * @return AddExistedNodesResponse
 */
async function addExistedNodes(request: AddExistedNodesRequest): AddExistedNodesResponse {
  var runtime = new $RuntimeOptions{};
  return addExistedNodesWithOptions(request, runtime);
}

model AddLocalNodesRequest {
  clusterId?: string(name='ClusterId', description='The ID of the cluster.

This parameter is required.', example='ehpc-hz-FYUr32****'),
  nodes?: string(name='Nodes', description='The information of the local node. A JSON string that contains the HostName, IpAddress, CpuCores, and Memory (Unit: MB) of the local node.

This parameter is required.', example='[{"HostName":"test-HostName","IpAddress":"``192.168.**.**``"},{"CpuCores":2,"Memory":1024}]'),
  queue?: string(name='Queue', description='The queue to which to add the local node.', example='test.q'),
}

model AddLocalNodesResponseBody = {
  instanceIds?: {
    instanceId?: [ string ](name='InstanceId')
  }(name='InstanceIds', description='The local nodes in the cluster.'),
  requestId?: string(name='RequestId', description='The ID of the request.', example='04F0F334-1335-436C-A1D7-6C044FE73368'),
}

model AddLocalNodesResponse = {
  headers?: map[string]string(name='headers'),
  statusCode?: int32(name='statusCode'),
  body?: AddLocalNodesResponseBody(name='body'),
}

/**
 * @param request AddLocalNodesRequest
 * @param runtime runtime options for this request RuntimeOptions
 * @return AddLocalNodesResponse
 */
async function addLocalNodesWithOptions(request: AddLocalNodesRequest, runtime: $RuntimeOptions): AddLocalNodesResponse {
  request.validate();
  var query = OpenApiUtil.query(request.toMap());
  var req = new OpenApiUtil.OpenApiRequest{ 
    query = OpenApiUtil.query(query),
  };
  var params = new OpenApiUtil.Params{
    action = 'AddLocalNodes',
    version = '2018-04-12',
    protocol = 'HTTPS',
    pathname = '/',
    method = 'GET',
    authType = 'AK',
    style = 'RPC',
    reqBodyType = 'formData',
    bodyType = 'json',
  };
  return callApi(params, req, runtime);
}

/**
 * @param request AddLocalNodesRequest
 * @return AddLocalNodesResponse
 */
async function addLocalNodes(request: AddLocalNodesRequest): AddLocalNodesResponse {
  var runtime = new $RuntimeOptions{};
  return addLocalNodesWithOptions(request, runtime);
}

model AddNodesRequest {
  allocatePublicAddress?: boolean(name='AllocatePublicAddress', description='Specifies whether to allocate a public IP address to the compute nodes. Valid values:

*   true
*   false

Default value: false.', example='false'),
  autoRenew?: string(name='AutoRenew', description='Specifies whether to enable auto-renewal. The parameter takes effect only when EcsChargeType is set to PrePaid. Valid values:

*   true: enables auto-renewal
*   false: disables auto-renewal

Default value: true.', example='true'),
  autoRenewPeriod?: int32(name='AutoRenewPeriod', description='The auto-renewal period of the subscription compute nodes. The parameter takes effect when AutoRenew is set to true.

*   Valid values when PeriodUnit is set to Week: 1, 2, and 3.
*   Valid values when PeriodUnit is set to Month: 1, 2, 3, 6, and 12.

Default value: 1.', example='1'),
  clientToken?: string(name='ClientToken', description='The client token that is used to ensure the idempotence of the request. You can use the client to generate the token, but make sure that the token is unique among different requests. The token can contain only ASCII characters and cannot exceed 64 characters in length. For more information, see [How do I ensure the idempotence of a request?](https://help.aliyun.com/document_detail/25693.html)', example='123e4567-e89b-12d3-a456-426655440000'),
  clusterId?: string(name='ClusterId', description='The ID of the E-HPC cluster.

You can call the [ListClusters](https://help.aliyun.com/document_detail/87116.html) operation to query the cluster ID.

This parameter is required.', example='ehpc-hz-FYUr32****'),
  computeEnableHt?: boolean(name='ComputeEnableHt', description='Specifies whether to enable hyper-threading for the compute node. Valid values:

*   true
*   false

Default value: true.', example='true'),
  computeSpotDuration?: int32(name='ComputeSpotDuration', description='The protection period of the preemptible instance. Unit: hours. Valid values: 0 and 1. A value of 0 indicates that the preemptible instance has no protection period.', example='1'),
  computeSpotInterruptionBehavior?: string(name='ComputeSpotInterruptionBehavior', description='The interruption mode of the preemptible instance. Default value: Terminate. Set the value to Terminate, which indicates that the instance is released.', example='Terminate'),
  computeSpotPriceLimit?: string(name='ComputeSpotPriceLimit', description='The maximum hourly price of the compute nodes. The value can be accurate to three decimal places. The parameter only takes effect when SpotStrategy is set to SpotWithPriceLimit.', example='0.68'),
  computeSpotStrategy?: string(name='ComputeSpotStrategy', description='The preemption policy of the compute nodes. The parameter only takes effect when EcsChargeType is set to PostPaid. Valid values:

*   NoSpot: The instance is a regular pay-as-you-go instance.
*   SpotWithPriceLimit: The policy applies to preemptible instances for which a maximum hourly price is specified.
*   SpotAsPriceGo: The compute nodes are preemptible instances for which the market price at the time of purchase is used as the bid price.

Default value: NoSpot.', example='NoSpot'),
  count?: int32(name='Count', description='The number of compute nodes that you want to add. Valid values: 1 to 99. The value of this parameter is greater than that of the MinCount parameter.

*   If the number of available ECS instances is less than the value of the MinCount parameter, the compute nodes cannot be added.
*   If the number of available ECS instances is greater than the value of the MinCount parameter and less than that of the Count parameter, the compute nodes are added based on the value of the MinCount parameter.
*   If the number of available ECS instances is greater than the value of the Count parameter, the compute nodes are added based on the value of the Count parameter.

This parameter is required.', example='10'),
  createMode?: string(name='CreateMode', description='The mode in which the compute nodes are added. Valid values:

*   manual: The compute nodes are manually added.
*   autoscale: The compute nodes are automatically added.

Default value: manual.', example='manual'),
  dataDisks?: [ 
    {
      dataDiskCategory?: string(name='DataDiskCategory', description='The type of the data disk. Valid values:

*   cloud_efficiency: ultra disk
*   cloud_ssd: SSD
*   cloud_essd: ESSD
*   cloud: basic disk

Default value: cloud_efficiency.

Valid values of N: 0 to 16.', example='cloud_efficiency'),
      dataDiskDeleteWithInstance?: boolean(name='DataDiskDeleteWithInstance', description='Specifies whether the data disk is released when the node is released. Valid values:

*   true
*   false

Default value: true.

Valid values of N: 0 to 16.', example='true'),
      dataDiskEncrypted?: boolean(name='DataDiskEncrypted', description='Specifies whether to encrypt the data disk. Valid values:

*   true
*   false

Default value: false.

Valid values of N: 0 to 16.', example='false'),
      dataDiskKMSKeyId?: string(name='DataDiskKMSKeyId', description='The KMS key ID of the data disk.

Valid values of N: 0 to 16.', example='0e478b7a-4262-4802-b8cb-00d3fb40826X'),
      dataDiskPerformanceLevel?: string(name='DataDiskPerformanceLevel', description='The performance level of the ESSD used as the data disk. The parameter only takes effect only when the DataDisks.N.DataDiskCategory parameter is set to cloud_essd. Valid values:

*   PL0: A single ESSD can deliver up to 10,000 random read/write IOPS.
*   PL1: A single ESSD can deliver up to 50,000 random read/write IOPS.
*   PL2: A single ESSD can deliver up to 100,000 random read/write IOPS.
*   PL3: A single ESSD can deliver up to 1,000,000 random read/write IOPS.

Default value: PL1.

Valid values of N: 0 to 16.', example='PL1'),
      dataDiskSize?: int32(name='DataDiskSize', description='The size of the data disk. Unit: GB.

Valid values: 40 to 500.

Default value: 40.

Valid values of N: 0 to 16.', example='40'),
    }
  ](name='DataDisks', description='The list of data disks.'),
  dnsConfig?: string(name='DnsConfig', description='The information about Domain Name System (DNS) settings.', example='"{\\\\"DnsType\\\\":\\\\"PrivateZone\\\\",\\\\"DnsName\\\\":\\\\"xxxxx\\\\"}"'),
  ecsChargeType?: string(name='EcsChargeType', description='The billing method of the compute nodes. Valid values:

*   PostPaid: pay-as-you-go
*   PrePaid: subscription

Default value: PostPaid.

If the parameter is set to PrePaid, auto-renewal is enabled by default. After the E-HPC cluster is released, auto-renewal is disabled.', example='PostPaid'),
  hostNamePrefix?: string(name='HostNamePrefix', description='The prefix of the hostname. You can specify the parameter to manage the compute nodes in an efficient manner.', example='compute'),
  hostNameSuffix?: string(name='HostNameSuffix', description='The suffix of the hostname. You can specify the parameter to manage the compute nodes in an efficient manner.', example='01'),
  imageId?: string(name='ImageId', description='The ID of the image that is specified for the compute nodes. The image must meet the following requirements:

*   The operating system that is specified by the image must be the same as that of the existing cluster nodes. For example, if the operating system of the cluster nodes is CentOS, you can select only a CentOS image.

> If you add nodes to a hybrid cloud cluster that supports multiple operating systems, you can select a Windows Server image or a CentOS image when the operating system of nodes is Windows.

*   The major version of the image specified for the compute nodes that you want to add is the same as that of the image of the cluster. For example, if the version of the cluster image is CentOS 7.x, the version of the image specified for the compute nodes must be CentOS 7.x.

You can call the [ListImages](https://help.aliyun.com/document_detail/87213.html) and [ListCustomImages](https://help.aliyun.com/document_detail/87215.html) operations to query the image ID.', example='centos_7_06_64_20G_alibase_20190711.vhd'),
  imageOwnerAlias?: string(name='ImageOwnerAlias', description='The type of the image. Valid values:

*   system: public image
*   self: custom image
*   others: shared image
*   marketplace: Alibaba Cloud Marketplace image

Default value: system.', example='system'),
  instanceType?: string(name='InstanceType', description='The instance type of the compute nodes. The default value is the instance type that was specified when you created the E-HPC cluster or the last time when you added compute nodes.', example='ecs.n1.tiny'),
  internetChargeType?: string(name='InternetChargeType', description='The billing method of the elastic IP address (EIP). Valid values:

*   PayByBandwidth: pay-by-bandwidth
*   PayByTraffic: pay-by-traffic', example='PayByTraffic'),
  internetMaxBandWidthIn?: int32(name='InternetMaxBandWidthIn', description='The maximum inbound public bandwidth. Unit: Mbit/s. Valid values:

*   If the purchased outbound public bandwidth is less than or equal to 10 Mbit/s, the valid values of the parameter are 1 to 10 and the default value is 10.
*   If the purchased outbound public bandwidth is greater than 10 Mbit/s, the valid values of this parameter are 1 to the amount of the outbound bandwidth that is purchased.', example='10'),
  internetMaxBandWidthOut?: int32(name='InternetMaxBandWidthOut', description='The maximum outbound public bandwidth. Unit: Mbit/s. Valid values: 0 to 100.

Default value: 0.', example='10'),
  jobQueue?: string(name='JobQueue', description='The queue to which the compute nodes are added.', example='workq'),
  minCount?: int32(name='MinCount', description='The minimum number of the compute nodes that you want to add. Valid values: 1 to 99. The value of the parameter is less than that of the Count parameter.

*   If the number of available ECS instances is less than the value of the MinCount parameter, the compute nodes cannot be added.
*   If the number of available ECS instances is greater than the value of the MinCount parameter and less than that of the Count parameter, the compute nodes are added based on the value of the MinCount parameter.
*   If the number of available ECS instances is greater than the value of the Count parameter, the compute nodes are added based on the value of the Count parameter.

Default value: 1.', example='1'),
  networkInterfaceTrafficMode?: string(name='NetworkInterfaceTrafficMode', description='The communication mode of the ENI. Valid values:

*   Standard: uses the TCP communication mode.
*   HighPerformance: enables the Elastic RDMA Interface (ERI) and uses the remote direct memory access (RDMA) communication mode.', example='Standard'),
  period?: int32(name='Period', description='The duration of the subscription. The unit of the duration is specified by the PeriodUnit parameter. The parameter only takes effect when InstanceChargeType is set to PrePaid. Valid values:

*   Valid values when PeriodUnit is set to Week: 1, 2, 3, and 4.
*   Valid values when PeriodUnit is set to Month: 1, 2, 3, 4, 5, 6, 7, 8, 9, 12, 24, 36, 48, and 60.

Default value: 1.', example='1'),
  periodUnit?: string(name='PeriodUnit', description='The unit of the subscription period of the resource. Valid values:

*   Week
*   Month

Default value: Month.', example='Month'),
  sync?: boolean(name='Sync', description='Specifies whether to set this operation as a synchronous operation. Valid values:

*   true
*   false

Default value: false.', example='false'),
  systemDiskLevel?: string(name='SystemDiskLevel', description='The performance level of the ESSD to be used as the system disk. Default value: PL1. Valid values:

*   PL0: A single ESSD can deliver up to 10,000 random read/write IOPS.
*   PL1: A single ESSD can deliver up to 50,000 random read/write IOPS.
*   PL2: A single ESSD can deliver up to 100,000 random read/write IOPS.
*   PL3: A single ESSD can deliver up to 1,000,000 random read/write IOPS.

Default value: PL1.

For more information about ESSD performance parameters, see [ESSD](https://help.aliyun.com/document_detail/122389.html).', example='PL0'),
  systemDiskSize?: int32(name='SystemDiskSize', description='The size of the system disk. Unit: GiB.

Valid values: 40 to 500.

Default value: 40.', example='40'),
  systemDiskType?: string(name='SystemDiskType', description='The type of the system disk. Valid values:

*   cloud_efficiency: ultra disk
*   cloud_ssd: SSD
*   cloud_essd: enhanced SSD (ESSD)
*   cloud: basic disk. Disks of this type are retired.

Default value: cloud_efficiency.', example='cloud_ssd'),
  vSwitchId?: string(name='VSwitchId', description='The ID of the vSwitch.', example='vsw-bp1lfcjbfb099rrjn****'),
  zoneId?: string(name='ZoneId', description='The ID of the zone.', example='cn-hangzhou-b'),
}

model AddNodesResponseBody = {
  instanceIds?: {
    instanceId?: [ string ](name='InstanceId')
  }(name='InstanceIds', description='The instance IDs.'),
  requestId?: string(name='RequestId', description='The ID of the request.', example='B745C159-3155-4B94-95D0-4B73D4D2****'),
  taskId?: string(name='TaskId', description='The ID of the task.', example='B745C159-3155-4B94-95D0-4B73D4D2****'),
}

model AddNodesResponse = {
  headers?: map[string]string(name='headers'),
  statusCode?: int32(name='statusCode'),
  body?: AddNodesResponseBody(name='body'),
}

/**
 * @summary Adds one or more compute nodes to an E-HPC cluster.
 *
 * @param request AddNodesRequest
 * @param runtime runtime options for this request RuntimeOptions
 * @return AddNodesResponse
 */
async function addNodesWithOptions(request: AddNodesRequest, runtime: $RuntimeOptions): AddNodesResponse {
  request.validate();
  var query = OpenApiUtil.query(request.toMap());
  var req = new OpenApiUtil.OpenApiRequest{ 
    query = OpenApiUtil.query(query),
  };
  var params = new OpenApiUtil.Params{
    action = 'AddNodes',
    version = '2018-04-12',
    protocol = 'HTTPS',
    pathname = '/',
    method = 'GET',
    authType = 'AK',
    style = 'RPC',
    reqBodyType = 'formData',
    bodyType = 'json',
  };
  return callApi(params, req, runtime);
}

/**
 * @summary Adds one or more compute nodes to an E-HPC cluster.
 *
 * @param request AddNodesRequest
 * @return AddNodesResponse
 */
async function addNodes(request: AddNodesRequest): AddNodesResponse {
  var runtime = new $RuntimeOptions{};
  return addNodesWithOptions(request, runtime);
}

model AddQueueRequest {
  clusterId?: string(name='ClusterId', description='The cluster ID.

You can call the [ListClusters](https://help.aliyun.com/document_detail/87116.html) operation to query the cluster ID.

This parameter is required.', example='ehpc-hz-FYUr32****'),
  deploymentSetId?: string(name='DeploymentSetId', description='The deployment set ID. You can obtain the deployment set ID by calling the [DescribeDeploymentSets](https://help.aliyun.com/document_detail/91313.html) operation. Only the deployment sets that use low latency policy are supported.', example='ds-bp1frxuzdg87zh4pzq****'),
  networkInterfaceTrafficMode?: string(name='NetworkInterfaceTrafficMode', description='The communication mode of the elastic network interface (ENI). Valid values:

*   Standard: uses the TCP communication mode.
*   HighPerformance: uses the remote direct memory access (RDMA) communication mode with Elastic RDMA Interface (ERI) enabled.', example='Standard'),
  queueName?: string(name='QueueName', description='The name of the queue. The name must be 1 to 63 characters in length and start with a letter. It can contain letters, digits, and underscores (_).

This parameter is required.', example='test1'),
  useESS?: boolean(name='UseESS', description='Specifies whether to use scaling groups of Auto Scaling.', example='false'),
}

model AddQueueResponseBody = {
  requestId?: string(name='RequestId', description='The request ID.', example='7ABFF29F-BD9C-4663-AD5D-E620FA48****'),
}

model AddQueueResponse = {
  headers?: map[string]string(name='headers'),
  statusCode?: int32(name='statusCode'),
  body?: AddQueueResponseBody(name='body'),
}

/**
 * @summary Creates a queue for a cluster.
 *
 * @param request AddQueueRequest
 * @param runtime runtime options for this request RuntimeOptions
 * @return AddQueueResponse
 */
async function addQueueWithOptions(request: AddQueueRequest, runtime: $RuntimeOptions): AddQueueResponse {
  request.validate();
  var query = OpenApiUtil.query(request.toMap());
  var req = new OpenApiUtil.OpenApiRequest{ 
    query = OpenApiUtil.query(query),
  };
  var params = new OpenApiUtil.Params{
    action = 'AddQueue',
    version = '2018-04-12',
    protocol = 'HTTPS',
    pathname = '/',
    method = 'GET',
    authType = 'AK',
    style = 'RPC',
    reqBodyType = 'formData',
    bodyType = 'json',
  };
  return callApi(params, req, runtime);
}

/**
 * @summary Creates a queue for a cluster.
 *
 * @param request AddQueueRequest
 * @return AddQueueResponse
 */
async function addQueue(request: AddQueueRequest): AddQueueResponse {
  var runtime = new $RuntimeOptions{};
  return addQueueWithOptions(request, runtime);
}

model AddSecurityGroupRequest {
  clientToken?: string(name='ClientToken', description='The client token that is used to ensure the idempotence of the request. You can use the client to generate the value, but make sure that the value is unique among different requests. The token can only contain ASCII characters and cannot exceed 64 characters in length. For more information, see [How do I ensure the idempotence of a request?](https://help.aliyun.com/document_detail/25693.html)', example='123e4567-e89b-12d3-a456-426655440000'),
  clusterId?: string(name='ClusterId', description='The ID of the E-HPC cluster.

You can call the [ListClusters](https://help.aliyun.com/document_detail/87116.html) operation to query the cluster ID.

This parameter is required.', example='ehpc-hz-FYUr32****'),
  securityGroupId?: string(name='SecurityGroupId', description='The security group ID of the instance.

You can call the [DescribeSecurityGroups](https://help.aliyun.com/document_detail/25556.html) operation to query available security groups in the current region.

This parameter is required.', example='sg-bp13n61xsydodfyg****'),
}

model AddSecurityGroupResponseBody = {
  requestId?: string(name='RequestId', description='The request ID.', example='04F0F334-1335-436C-A1D7-6C044FE73368'),
}

model AddSecurityGroupResponse = {
  headers?: map[string]string(name='headers'),
  statusCode?: int32(name='statusCode'),
  body?: AddSecurityGroupResponseBody(name='body'),
}

/**
 * @summary Adds a cluster to a security group.
 *
 * @param request AddSecurityGroupRequest
 * @param runtime runtime options for this request RuntimeOptions
 * @return AddSecurityGroupResponse
 */
async function addSecurityGroupWithOptions(request: AddSecurityGroupRequest, runtime: $RuntimeOptions): AddSecurityGroupResponse {
  request.validate();
  var query = OpenApiUtil.query(request.toMap());
  var req = new OpenApiUtil.OpenApiRequest{ 
    query = OpenApiUtil.query(query),
  };
  var params = new OpenApiUtil.Params{
    action = 'AddSecurityGroup',
    version = '2018-04-12',
    protocol = 'HTTPS',
    pathname = '/',
    method = 'GET',
    authType = 'AK',
    style = 'RPC',
    reqBodyType = 'formData',
    bodyType = 'json',
  };
  return callApi(params, req, runtime);
}

/**
 * @summary Adds a cluster to a security group.
 *
 * @param request AddSecurityGroupRequest
 * @return AddSecurityGroupResponse
 */
async function addSecurityGroup(request: AddSecurityGroupRequest): AddSecurityGroupResponse {
  var runtime = new $RuntimeOptions{};
  return addSecurityGroupWithOptions(request, runtime);
}

model AddUsersRequest {
  async?: boolean(name='Async', description='Specifies whether to use asynchronous message links to add the users.

Default value: false.', example='false'),
  clusterId?: string(name='ClusterId', description='The cluster ID.

You can call the [ListClusters](https://help.aliyun.com/document_detail/87116.html) operation to obtain the cluster ID.

This parameter is required.', example='ehpc-hz-FYUr32****'),
  user?: [ 
    {
      group?: string(name='Group', description='The permission group of the new user. Valid values:

*   users: ordinary permissions, which are suitable for ordinary users that need only to submit and debug jobs.
*   wheel: sudo permissions, which are suitable for administrators who need to manage clusters. In addition to submitting and debugging jobs, you can also run sudo commands to install software and restart nodes.', example='users'),
      name?: string(name='Name', description='The username of the new user. The username must be 6 to 30 characters in length, and can contain letters, digits and periods (.). The username must start with a letter.', example='user1'),
      password?: string(name='Password', description='The password of the new user. The password must be 8 to 30 characters in length and must contain at least three of the following character types:

*   Uppercase letter
*   Lowercase letter
*   Digit
*   Special character: `()~!@#$%^&*-_+=|{}[]:;\\\\"/<>,.?/`

>  We recommend that you use HTTPS to call this operation to avoid password leaks.', example='1@a2****'),
    }
  ](name='User', description='The users. You can specify 1 to 100 users.

This parameter is required.'),
}

model AddUsersResponseBody = {
  requestId?: string(name='RequestId', description='The ID of the request.', example='04F0F334-1335-436C-A1D7-6C044FE7****'),
}

model AddUsersResponse = {
  headers?: map[string]string(name='headers'),
  statusCode?: int32(name='statusCode'),
  body?: AddUsersResponseBody(name='body'),
}

/**
 * @summary Adds users to a cluster.
 *
 * @param request AddUsersRequest
 * @param runtime runtime options for this request RuntimeOptions
 * @return AddUsersResponse
 */
async function addUsersWithOptions(request: AddUsersRequest, runtime: $RuntimeOptions): AddUsersResponse {
  request.validate();
  var query = OpenApiUtil.query(request.toMap());
  var req = new OpenApiUtil.OpenApiRequest{ 
    query = OpenApiUtil.query(query),
  };
  var params = new OpenApiUtil.Params{
    action = 'AddUsers',
    version = '2018-04-12',
    protocol = 'HTTPS',
    pathname = '/',
    method = 'GET',
    authType = 'AK',
    style = 'RPC',
    reqBodyType = 'formData',
    bodyType = 'json',
  };
  return callApi(params, req, runtime);
}

/**
 * @summary Adds users to a cluster.
 *
 * @param request AddUsersRequest
 * @return AddUsersResponse
 */
async function addUsers(request: AddUsersRequest): AddUsersResponse {
  var runtime = new $RuntimeOptions{};
  return addUsersWithOptions(request, runtime);
}

model ApplyNodesRequest {
  allocatePublicAddress?: boolean(name='AllocatePublicAddress', description='Specifies whether to allocate a public IP address to the compute nodes. Valid values:

*   true: A public IP address is allocated to the compute nodes.
*   false: A public IP address is not allocated to the compute nodes.

Default value: false.', example='false'),
  clusterId?: string(name='ClusterId', description='The ID of the E-HPC cluster.

You can call the [ListClusters](https://help.aliyun.com/document_detail/87126.html) operation to query the cluster ID.

This parameter is required.', example='ehpc-hz-FYUr32****'),
  computeSpotPriceLimit?: float(name='ComputeSpotPriceLimit', description='The maximum hourly price of the compute nodes. The value is a floating-point number that supports up to three decimal places. The parameter takes effect only when ComputeSpotStrategy is set to SpotWithPriceLimit.

If ComputeSpotPriceLimit and InstanceTypeModel.N.MaxPrice are specified at the same time, compute nodes are created based on the smaller value of the two parameters.', example='0.68'),
  computeSpotStrategy?: string(name='ComputeSpotStrategy', description='The preemption policy of the compute nodes. Valid values:

*   NoSpot: The compute nodes are pay-as-you-go instances.
*   SpotWithPriceLimit: The compute nodes are preemptible instances that have a user-defined maximum hourly price.
*   SpotAsPriceGo: The compute nodes are preemptible instances for which the market price at the time of purchase is used as the bid price.

Default value: NoSpot.', example='NoSpot'),
  cores?: int32(name='Cores', description='The number of vCPUs. The parameter is required when the ResourceAmountType parameter is set to Cores.

You can set vCPU and Memory to query node specifications. For example, you can query the available compute nodes that have 2 vCPUs and 16 GB of memory by setting vCPU to 2 and Memory to 16. You can also query compute nodes by node specification and zone. Query results are sorted by price. The nodes that have the lowest price are created.', example='2'),
  hostNamePrefix?: string(name='HostNamePrefix', description='The prefix of the hostname. You can specify the parameter to manage the compute nodes in an efficient manner.', example='compute'),
  hostNameSuffix?: string(name='HostNameSuffix', description='The suffix of the hostname. You can specify the parameter to manage the compute nodes in an efficient manner.', example='01'),
  imageId?: string(name='ImageId', description='The image ID of the compute nodes to be added. The parameter takes effect only when the TargetImageId parameter is not specified.

You can call the [ListImages](https://help.aliyun.com/document_detail/87213.html) and [ListCustomImages](https://help.aliyun.com/document_detail/87215.html) operations to query the image ID.

>  If you add multiple compute nodes, the TargetImageId parameter takes effect only on the nodes for which the TargetImageId parameter is specified.', example='centos_7_06_64_20G_alibase_20190711.vhd'),
  instanceFamilyLevel?: string(name='InstanceFamilyLevel', description='The level of the instance family. The parameter takes effect only when Cores and Memory are specified. Valid values:

*   EntryLevel
*   EnterpriseLevel
*   CreditEntryLevel For more information, see [Overview of burstable instances](https://help.aliyun.com/document_detail/59977.html).

Default value: EnterpriseLevel.', example='EntryLevel'),
  instanceTypeModel?: [ 
    {
      instanceType?: string(name='InstanceType', description='The instance type of the compute node. The default value is the instance type that was specified when you created the cluster or the last time you added compute nodes.

Valid values of N: 1 to 10.', example='ecs.n1.tiny'),
      maxPrice?: float(name='MaxPrice', description='The maximum hourly price that you can pay for the preemptible node. The value is a floating-point number that supports up to three decimal places.

The parameter takes effect only when ComputeSpotStrategy is set to SpotWithPriceLimit.

Valid values of N: 1 to 10.', example='0.034'),
      targetImageId?: string(name='TargetImageId', description='The image ID of the compute node. You must select a Windows image.

Valid values of N: 1 to 10.', example='win2016_1607_x64_dtc_zh-cn_40G_alibase_20210516.vhd'),
    }
  ](name='InstanceTypeModel', description='The information about the preemptible instance.'),
  internetChargeType?: string(name='InternetChargeType', description='The billing method of the elastic IP address (EIP). Valid values:

*   PayByBandwidth: pay-by-bandwidth
*   PayByTraffic: pay-by-traffic', example='PayByTraffic'),
  internetMaxBandWidthIn?: int32(name='InternetMaxBandWidthIn', description='The maximum inbound public bandwidth. Unit: Mbit/s. Valid values:

*   If the purchased outbound public bandwidth is less than or equal to 10 Mbit/s, the valid values of the parameter are 1 to 10 and the default value is 10.
*   If the purchased outbound public bandwidth is greater than 10 Mbit/s, the valid values of this parameter are 1 to the amount of the outbound bandwidth that is purchased. The default value is the value of the InternetMaxBandWidthOut parameter.', example='10'),
  internetMaxBandWidthOut?: int32(name='InternetMaxBandWidthOut', description='The maximum outbound public bandwidth. Unit: Mbit/s. Valid values: 0 to 100.

Default value: 0.', example='10'),
  interval?: int32(name='Interval', description='The interval between two consecutive batches. Valid values: 60 to 600. Unit: seconds.

Default value: 60.', example='60'),
  jobQueue?: string(name='JobQueue', description='The queue to which the compute nodes are added.

You can call the [ListQueues](https://help.aliyun.com/document_detail/92176.html) operation to query the queue name.', example='workq'),
  memory?: int32(name='Memory', description='The memory capacity. The parameter is required when the ResourceAmountType parameter is set to Cores. Unit: GB.

You can set vCPU and Memory to query node specifications. For example, you can query the available compute nodes that have 2 vCPUs and 16 GB of memory by setting vCPU to 2 and Memory to 16. You can also query compute nodes by node specification and zone. Query results are sorted by price. The nodes that have the lowest price are created.', example='16'),
  priorityStrategy?: string(name='PriorityStrategy', description='The application policy of the preemptible nodes. Valid values:

*   LowPriceResourcePlanning: Preemptible nodes are created based on the unit prices of vCPUs in ascending order. Preemptible nodes are created first when multiple preemptible instance types are specified.
*   CapacityOptResourcePlanning: Preemptible nodes are created based on the prices and release rates in ascending order.
*   CustomizedResourcePlanning: Nodes are added based on the predefined value of the ZoneIds.N parameter. Instances of a zone that has a higher priority are used first.', example='LowPriceResourcePlanning'),
  resourceAmountType?: string(name='ResourceAmountType', description='The type of the resource that you want to add. Valid values:

*   Instances: the ECS instances that are used as compute nodes
*   Cores: vCPU and memory

Default value: Instances.', example='Instances'),
  round?: int32(name='Round', description='The total number of batches to create nodes. Valid values: 1 to 10.

Default value: 1.', example='1'),
  strictResourceProvision?: boolean(name='StrictResourceProvision', description='Specifies whether to strictly meet the requirements of the TargetCapacity parameter. The parameter takes effect only when StrictSatisfiedTargetCapacity is set to true. Valid values:

*   true: Check the inventory of the resources. Compute nodes are created based on the value of the TargetCapacity parameter only when the available resources are sufficient. Otherwise, no compute nodes are created.
*   false: Check the inventory of the resources. Compute nodes are created only when the available resources are sufficient. However, some compute nodes may fail to be created because resources become insufficient after the inventory query.

Default value: false.', example='false'),
  strictSatisfiedTargetCapacity?: boolean(name='StrictSatisfiedTargetCapacity', description='Specifies whether to meet the requirements of the TargetCapacity parameter. Valid values:

*   true: If the available resources are fewer than the resources that you want to add, no compute nodes are created and an error is returned. If the available resources are more than the resources that you want to add, the following cases may occur:

    *   If StrictResourceProvision is set to true, check the inventory of the resources. Compute nodes are created based on the value of the TargetCapacity parameter only when the available resources are sufficient. Otherwise, no compute nodes are created.
    *   If StrictResourceProvision is set to false, check the inventory of the resources. Compute nodes are created only when the available resources are sufficient. However, some compute nodes may fail to be created because resources become insufficient after the inventory query.

*   false: If the available resources are insufficient, compute nodes are created based on the inventory of the resources.

Default value: true.', example='true'),
  systemDiskLevel?: string(name='SystemDiskLevel', description='The performance level of the ESSD that you want to use as the system disk. Valid values:

*   PL0: A single ESSD can deliver up to 10,000 random read/write IOPS.
*   PL1: A single ESSD can deliver up to 50,000 IOPS of random read/write.
*   PL2: A single ESSD can deliver up to 100,000 random read/write IOPS.
*   PL3: A single ESSD can deliver up to 1,000,000 random read/write IOPS.

Default value: PL0. For more information, see [ESSDs](https://help.aliyun.com/document_detail/122389.html).', example='PL0'),
  systemDiskSize?: int32(name='SystemDiskSize', description='The size of the system disk. Unit: GB.

Valid values: 40 to 500.

Default value: 40.', example='40'),
  systemDiskType?: string(name='SystemDiskType', description='The type of the system disk. Valid values:

*   cloud_efficiency: ultra disk
*   cloud_ssd: SSD
*   cloud_essd: enhanced SSD (ESSD)
*   cloud: basic disk. Disks of this type are retired.', example='cloud_ssd'),
  tag?: [ 
    {
      key?: string(name='Key', description='The tag key. The tag key cannot be an empty string. The tag key can be up to 128 characters in length. It cannot start with aliyun or acs: and cannot contain http:// or https://.

Valid values of N: 1 to 20.', example='TestKey'),
      value?: string(name='Value', description='The tag value. The tag value can be an empty string. The tag value can be up to 128 characters in length. It cannot start with acs: or contain http:// or https://.

Valid values of N: 1 to 20.', example='TestValue'),
    }
  ](name='Tag', description='The details about the tags that are added to the nodes.'),
  targetCapacity?: int32(name='TargetCapacity', description='The amount of the resource that you want to add. The specific number depends on the value of the ResourceAmountType parameter:

*   If ResourceAmountType is set to Instance, the value range of TargetCapacity is 1 to 200.
*   If ResourceAmountType is set to Cores, the value range of TargetCapacity is 1 to 1,000.

This parameter is required.', example='20'),
  userData?: string(name='UserData', description='The user data of the instance. The user data must be Base64-encoded. The raw data can be up to 16 KB in size. Linux operating systems support shell scripts. Windows operating systems support bat and Powershell scripts. Before you perform Base64 encoding, make sure that the content to be encoded includes [bat] or [powershell] as the first row.

>  We recommend that you do not pass in confidential information, such as passwords or private keys, in plaintext as user data. This is because the system does not encrypt UserData values when API requests are transmitted. If you must pass in confidential information, we recommend that you encrypt and encode the information in Base64, and then decode and decrypt the information in the same way inside the instance.', example='ZWNobyBoZWxsbyBlY3Mh'),
  zoneInfos?: [ 
    {
      vSwitchId?: string(name='VSwitchId', description='The ID of the vSwitch. Valid values of N: 1 to 10.', example='vsw-bp1e47optm9g58zcu****'),
      zoneId?: string(name='ZoneId', description='The ID of the zone to which the node belongs. Valid values of N: 1 to 10.

>  Each zone ID must be unique.', example='cn-hangzhou-b'),
    }
  ](name='ZoneInfos', description='The details of the zones. You can specify up to 10 zones.

This parameter is required.'),
}

model ApplyNodesResponseBody = {
  detail?: string(name='Detail', description='The detailed result of the request.', example='Resources Application is satisfied. Creating...'),
  instanceIds?: {
    instanceId?: [ string ](name='InstanceId')
  }(name='InstanceIds', description='The instance IDs.

>  AddNodes is an asynchronous API operation. If a request succeeds, a response is immediately generated before ECS instances are created. Therefore, the value of this parameter is null. You can call the [ListNodes](https://help.aliyun.com/document_detail/87161.html) operation to query the IDs of the ECS instances.'),
  requestId?: string(name='RequestId', description='The task ID.', example='B745C159-3155-4B94-95D0-4B73D4D2****'),
  satisfiedAmount?: int32(name='SatisfiedAmount', description='The number of the compute nodes that are created.', example='10'),
  taskId?: string(name='TaskId', description='The request ID.', example='B745C159-3155-4B94-95D0-4B73D4D2****'),
}

model ApplyNodesResponse = {
  headers?: map[string]string(name='headers'),
  statusCode?: int32(name='statusCode'),
  body?: ApplyNodesResponseBody(name='body'),
}

/**
 * @summary Adds pay-as-you-go or preemptible compute nodes to a cluster.
 *
 * @description ## [](#)Description
 * You can call the ApplyNodes operation to specify the number of compute nodes, the number of vCPUs, and the memory size when you add nodes to a cluster.
 *
 * @param request ApplyNodesRequest
 * @param runtime runtime options for this request RuntimeOptions
 * @return ApplyNodesResponse
 */
async function applyNodesWithOptions(request: ApplyNodesRequest, runtime: $RuntimeOptions): ApplyNodesResponse {
  request.validate();
  var query = OpenApiUtil.query(request.toMap());
  var req = new OpenApiUtil.OpenApiRequest{ 
    query = OpenApiUtil.query(query),
  };
  var params = new OpenApiUtil.Params{
    action = 'ApplyNodes',
    version = '2018-04-12',
    protocol = 'HTTPS',
    pathname = '/',
    method = 'GET',
    authType = 'AK',
    style = 'RPC',
    reqBodyType = 'formData',
    bodyType = 'json',
  };
  return callApi(params, req, runtime);
}

/**
 * @summary Adds pay-as-you-go or preemptible compute nodes to a cluster.
 *
 * @description ## [](#)Description
 * You can call the ApplyNodes operation to specify the number of compute nodes, the number of vCPUs, and the memory size when you add nodes to a cluster.
 *
 * @param request ApplyNodesRequest
 * @return ApplyNodesResponse
 */
async function applyNodes(request: ApplyNodesRequest): ApplyNodesResponse {
  var runtime = new $RuntimeOptions{};
  return applyNodesWithOptions(request, runtime);
}

model CreateClusterRequest {
  ecsOrder?: {
    compute?: {
        count?: int32(name='Count', description='The number of compute nodes in the cluster. Valid values: 0 to 99.', example='1'),
        instanceType?: string(name='InstanceType', description='The instance type of the compute nodes.

You can call the [ListPreferredEcsTypes](https://help.aliyun.com/document_detail/188592.html) operation to query the recommended instance types.', example='ecs.n1.tiny'),
    }(name='Compute'),
    login?: {
        count?: int32(name='Count', description='The number of the logon nodes. Valid value: 1.', example='1'),
        instanceType?: string(name='InstanceType', description='The instance type of the logon nodes.

You can call the [ListPreferredEcsTypes](https://help.aliyun.com/document_detail/188592.html) operation to query the recommended instance types.', example='ecs.n1.tiny'),
    }(name='Login'),
    manager?: {
        count?: int32(name='Count', description='The number of the management nodes. Valid values: 1 and 2.', example='1'),
        instanceType?: string(name='InstanceType', description='The instance type of the management nodes.

You can call the [ListPreferredEcsTypes](https://help.aliyun.com/document_detail/188592.html) operation to query the recommended instance types.', example='ecs.n1.tiny'),
    }(name='Manager'),
  }(name='EcsOrder'),
  accountType?: string(name='AccountType', description='The type of the domain account service. Valid values:

*   nis
*   ldap

Default value: nis.', example='nis'),
  addOns?: [ 
    {
      configFile?: string(name='ConfigFile', description='The path to the configuration file.', example='/usr/local/addon/cromwell/cromwell.conf'),
      DBType?: string(name='DBType', description='The type of the database engine. Valid values: Mysql, and null.', example='Mysql'),
      defaultStart?: boolean(name='DefaultStart', description='Indicates whether to auto-start the custom component. Valid values: true and false.', example='true'),
      deployMode?: string(name='DeployMode', description='The deployment mode. Valid values: local and ecs.', example='local'),
      name?: string(name='Name', description='The component name.', example='cromwell'),
      port?: float(name='Port', description='The access port of the custom component.', example='10000'),
      version?: string(name='Version', description='The version number of the component.', example='85'),
    }
  ](name='AddOns', description='The custom component service.'),
  additionalVolumes?: [ 
    {
      jobQueue?: string(name='JobQueue', description='The queue of the nodes to which the NAS file system is attached.

Valid values of N: 1 to 10.', example='high'),
      localDirectory?: string(name='LocalDirectory', description='The local directory on which the NAS file system is mounted.

Valid values of N: 1 to 10.', example='/ff'),
      location?: string(name='Location', description='The type of the E-HPC cluster. Set the value to PublicCloud.

Valid values of N: 1 to 10.', example='PublicCloud'),
      remoteDirectory?: string(name='RemoteDirectory', description='The remote directory to which the NAS file system is mounted.

Valid values of N: 1 to 10.', example='/test'),
      roles?: [ 
        {
          name?: string(name='Name', description='The type of the nodes to which the NAS file system is attached.

Valid values of N in AdditionalVolumes.N.Roles: 1 to 10

Valid values of N in Roles.N.Name: 0 to 8.', example='["Compute"]'),
        }
      ](name='Roles', description='The node information to which the NAS file system is attached.'),
      volumeId?: string(name='VolumeId', description='The ID of the NAS file system.

Valid values of N: 1 to 10.', example='extreme-00b88****'),
      volumeMountOption?: string(name='VolumeMountOption', description='The mount options of the NAS file system.

You can specify 1 to 10 vCPUs.', example='-t nfs -o vers=4.0'),
      volumeMountpoint?: string(name='VolumeMountpoint', description='The mount target of the NAS file system.

Valid values of N: 1 to 10.', example='0088****-sihc.cn-hangzhou.extreme.nas.aliyuncs.com'),
      volumeProtocol?: string(name='VolumeProtocol', description='The type of the protocol that is used by the NAS file system. Valid value:

*   NFS
*   SMB

Valid values of N: 1 to 10.

Default value: NFS.', example='NFS'),
      volumeType?: string(name='VolumeType', description='The type of the additional shared storage. Only NAS file systems are supported.

Valid values of N: 1 to 10.', example='nas'),
    }
  ](name='AdditionalVolumes', description='The information of the NAS file system.'),
  application?: [ 
    {
      tag?: string(name='Tag', description='The tag of the software.

Valid values of N: 0 to 100.

You can call the [ListSoftwares](https://help.aliyun.com/document_detail/87216.html) operation to query the tag of the software.', example='OpenMPI_11.1'),
    }
  ](name='Application', description='The application information.'),
  autoRenew?: string(name='AutoRenew', description='Specifies whether to enable auto-renewal. Valid values:

*   true
*   false

Default value: false.', example='false'),
  autoRenewPeriod?: int32(name='AutoRenewPeriod', description='The auto-renewal period of the subscription compute nodes. The parameter takes effect when AutoRenew is set to true.', example='1'),
  clientToken?: string(name='ClientToken', description='The client token that is used to ensure the idempotence of the request. You can use the client to generate the value, but make sure that the value is unique among different requests. The token can only contain ASCII characters and cannot exceed 64 characters in length. For more information, see [How to ensure idempotence](https://help.aliyun.com/document_detail/25693.html).', example='123e4567-e89b-12d3-a456-426655440000'),
  clientVersion?: string(name='ClientVersion', description='The version of the E-HPC client. By default, the parameter is set to the latest version number.

You can call the [ListCurrentClientVersion](https://help.aliyun.com/document_detail/87223.html) operation to query the latest version of the E-HPC client.', example='1.0.64'),
  clusterVersion?: string(name='ClusterVersion', description='The version of the E-HPC cluster.

Default value: 1.0.', example='1.0'),
  computeEnableHt?: boolean(name='ComputeEnableHt', description='Specifies whether to enable hyper-threading for the compute node. Valid values:

*   true
*   false

Default value: true.', example='true'),
  computeSpotPriceLimit?: string(name='ComputeSpotPriceLimit', description='The maximum hourly price of the compute nodes. A maximum of three decimal places can be used in the value of the parameter. The parameter is valid only when the ComputeSpotStrategy parameter is set to SpotWithPriceLimit.', example='0.034'),
  computeSpotStrategy?: string(name='ComputeSpotStrategy', description='The bidding method of the compute nodes. Valid values:

*   NoSpot: The compute nodes are pay-as-you-go instances.
*   SpotWithPriceLimit: The compute nodes are preemptible instances that have a user-defined maximum hourly price.
*   SpotAsPriceGo: The compute nodes are preemptible instances for which the market price at the time of purchase is used as the bid price.

Default value: NoSpot.', example='NoSpot'),
  deployMode?: string(name='DeployMode', description='The mode in which the E-HPC cluster is deployed. Valid values:

*   Standard: An account node, a scheduling node, a logon node, and multiple compute nodes are separately deployed.
*   Simple: A management node, which consists of an account node and a scheduling node, is deployed, while a logon node and multiple compute nodes are separately deployed.
*   Tiny: A management node and multiple compute nodes are deployed. The management node consists of an account node, a scheduling node, and a logon node. The compute nodes are separately deployed.

Default value: Standard.', example='Simple'),
  deploymentSetId?: string(name='DeploymentSetId', description='The ID of the deployment set in which to deploy the instance. You can obtain the deployment set ID by calling the [DescribeDeploymentSets](https://help.aliyun.com/document_detail/91313.html) operation. Only the deployment sets that use low latency policy are supported.', example='ds-bp1frxuzdg87zh4pzq****'),
  description?: string(name='Description', description='The description of the E-HPC cluster. The description must be 2 to 256 characters in length and cannot start with `http://` or `https://`.', example='TestDescription'),
  domain?: string(name='Domain', description='The domain name of the on-premises E-HPC cluster.

This parameter takes effect only when the AccountType parameter is set to Idap.', example='ldap'),
  ecsChargeType?: string(name='EcsChargeType', description='The billing method of the nodes. Valid values:

*   PostPaid: pay-as-you-go.
*   PrePaid: subscription.

If you set the parameter to PrePaid, auto-renewal is enabled by default.', example='PostPaid'),
  ehpcVersion?: string(name='EhpcVersion', description='The version of E-HPC. By default, the parameter is set to the latest version number.', example='1.0.0'),
  haEnable?: boolean(name='HaEnable', description='Specifies whether to enable the high availability feature. Valid values:

*   true
*   false

Default value: false.

> If high availability is enabled, a primary management node and a secondary management node are used.', example='true'),
  imageId?: string(name='ImageId', description='The image IDs.

You can call the [ListImages](https://help.aliyun.com/document_detail/87213.html) and [ListCustomImages](https://help.aliyun.com/document_detail/87215.html) operations to query the images that are supported by E-HPC.', example='centos_7_02_64_20G_alibase_20170818****'),
  imageOwnerAlias?: string(name='ImageOwnerAlias', description='The type of the image. Valid values:

*   system: public image
*   self: custom image
*   others: shared image

Default value: system.', example='self'),
  inputFileUrl?: string(name='InputFileUrl', description='The URL of the job file that is uploaded to an Object Storage Service (OSS) bucket.'),
  isComputeEss?: boolean(name='IsComputeEss', description='Specifies whether to enable auto scaling. Valid values:

*   true
*   false

Default value: false.', example='false'),
  jobQueue?: string(name='JobQueue', description='The queue to which the compute nodes are added.', example='workq'),
  keyPairName?: string(name='KeyPairName', description='The name of the key pair.

> For more information, see [Create an SSH key pair](https://help.aliyun.com/document_detail/51793.html).', example='test'),
  name?: string(name='Name', description='The name of the E-HPC cluster. The name must be 2 to 64 characters in length.

This parameter is required.', example='test'),
  networkInterfaceTrafficMode?: string(name='NetworkInterfaceTrafficMode', description='The communication model of the ENI. Valid values:

*   Standard: The TCP communication mode is used.
*   HighPerformance: uses the remote direct memory access (RDMA) communication mode with the Elastic RDMA Interface (ERI) enabled.', example='Standard'),
  osTag?: string(name='OsTag', description='The operating system tag of the image.', example='CentOS_7.2_64'),
  password?: string(name='Password', description='The root password of the logon node. The password must be 8 to 30 characters in length and contain at least three of the following items: uppercase letters, lowercase letters, digits, and special characters. Special characters include:

`( ) ~ ! @ # $ % ^ & * - + = | { } [ ] : ; ‘ < > , . ? /`

You must specify either Password or KeyPairName. If both are specified, the Password parameter prevails.

> We recommend that you use HTTPS to call the API operation to prevent password leakage.', example='123****'),
  period?: int32(name='Period', description='The duration of the subscription. The unit of the duration is specified by the `PeriodUnit` parameter.

*   Valid values if PriceUnit is set to Year: 1, 2, and 3.
*   Valid values if PriceUnit is set to Month: 1, 2, 3, 4, 5, 6, 7, 8, and 9.
*   Valid value if PriceUnit is set to Hour: 1.

Default value: 1.', example='1'),
  periodUnit?: string(name='PeriodUnit', description='The unit of the subscription duration. Valid values:

*   Year
*   Month
*   Hour

Default value: Month.', example='Year'),
  plugin?: string(name='Plugin', description='The mode configurations of the plug-in. This parameter takes effect only when the SchedulerType parameter is set to custom.

The value must be a JSON string. The parameter contains the following parameters: pluginMod, pluginLocalPath, and pluginOssPath.

*   pluginMod: the plug-in mode. The following modes are supported:

    *   oss: The plug-in is downloaded and decompressed from OSS to a local path that is specified by the pluginLocalPath parameter.
    *   image: By default, the plug-in is stored in a pre-defined local path that is specified by the pluginLocalPath parameter.

*   pluginLocalPath: the local path where the plug-in is stored. We recommend that you select a shared directory in oss mode and a non-shared directory in image mode.

*   pluginOssPath: the remote path where the plug-in is stored in OSS. This parameter takes effect only when the pluginMod parameter is set to oss.', example='{"pluginMod": "oss","pluginLocalPath": "/opt/plugin","pluginOssPath": "https://bucket.oss-cn-hangzhou.aliyuncs.com/plugin/plugin.tgz"}'),
  postInstallScript?: [ 
    {
      args?: string(name='Args', description='The parameter that is used to run the script after the cluster is created.

Valid values of N: 0 to 16.', example='bashfile.sh'),
      url?: string(name='Url', description='The URL that is used to download the script after the E-HPC cluster is created.

Valid values of N: 0 to 16', example='/opt/job.sh'),
    }
  ](name='PostInstallScript', description='The information of the post-installation script.'),
  ramNodeTypes?: [ string ](name='RamNodeTypes', description='The node of the RAM role.', example='Standard'),
  ramRoleName?: string(name='RamRoleName', description='The name of the Resource Access Management (RAM) role.

You can call the [ListRoles](https://help.aliyun.com/document_detail/28713.html) operation provided by RAM to query the instance RAM roles that you created.', example='testRamRoleName'),
  remoteDirectory?: string(name='RemoteDirectory', description='The remote directory to which the NAS file system is mounted.', example='NasMountpoint:/RemoteDirectory'),
  remoteVisEnable?: string(name='RemoteVisEnable', description='Specifies whether to enable Virtual Network Computing (VNC). Valid values:

*   true
*   false

Default value: false.', example='false'),
  resourceGroupId?: string(name='ResourceGroupId', description='The resource group ID.

You can call the [ListResourceGroups](https://help.aliyun.com/document_detail/158855.html) operation to obtain the ID of the resource group.', example='rg-acfmxazb4ph****'),
  sccClusterId?: string(name='SccClusterId', description='The Super Computing Cluster (SCC) instance ID.

If you specify the parameter, the SCC instance is moved to a new SCC cluster.', example='00b648b****'),
  schedulerType?: string(name='SchedulerType', description='The type of the scheduler. Valid values:

*   pbs
*   slurm
*   opengridscheduler
*   deadline

Default value: pbs.', example='pbs'),
  securityGroupId?: string(name='SecurityGroupId', description='The ID of the security group to which the E-HPC cluster belongs.

You can call the [DescribeSecurityGroups](https://help.aliyun.com/document_detail/25556.html) operation to query available security groups in the current region.', example='sg-bp13n61xsydodfyg****'),
  securityGroupName?: string(name='SecurityGroupName', description='If you do not use an existing security group, set the parameter to the name of a new security group. A default policy is applied to the new security group.', example='ehpc-SecurityGroup'),
  systemDiskLevel?: string(name='SystemDiskLevel', description='The performance level of the ESSD to be used as the system disk. Default value: PL1. Valid values:

*   PL0: An ESSD can deliver up to 10,000 random read/write IOPS.
*   PL1: An ESSD can deliver up to 50,000 random read/write IOPS.
*   PL2: An ESSD can deliver up to 100,000 random read/write IOPS.
*   PL3: An ESSD delivers up to 1,000,000 random read/write IOPS.

Default value: PL1.

For more information, see [ESSDs](https://help.aliyun.com/document_detail/122389.html).', example='PL0'),
  systemDiskSize?: int32(name='SystemDiskSize', description='The system disk size. Unit: GB.

Valid values: 40 to 500.

Default value: 40.', example='40'),
  systemDiskType?: string(name='SystemDiskType', description='The type of the system disk. Valid values:

*   cloud_efficiency: ultra disk
*   cloud_ssd: standard SSD
*   cloud_essd: enhanced SSD (ESSD)
*   cloud: basic disk. Disks of this type are retired.

Default value: cloud_ssd.', example='cloud_ssd'),
  tag?: [ 
    {
      key?: string(name='Key', description='The tag key.', example='TestKey'),
      value?: string(name='Value', description='The tag value.', example='TestValue'),
    }
  ](name='Tag', description='The array of the tags.', example='Standard'),
  vSwitchId?: string(name='VSwitchId', description='The vSwitch ID. E-HPC supports only VPC networks.

You can call the [DescribeVSwitches](https://help.aliyun.com/document_detail/35748.html) operation to query available vSwitches.', example='vsw-bp1lfcjbfb099rrjn****'),
  volumeId?: string(name='VolumeId', description='The ID of the NAS file system. If you leave the parameter empty, a Performance NAS file system is created by default.

You can call the [ListFileSystemWithMountTargets](https://help.aliyun.com/document_detail/204364.html) operation to query available mount targets.', example='008b64****'),
  volumeMountOption?: string(name='VolumeMountOption', description='The mount options of the NFS file system that you want to mount by running the mount command.

For more information, see [Mount an NFS file system on a Linux ECS instance](https://www.alibabacloud.com/help/en/nas/latest/mount-an-nfs-file-system-on-a-linux-ecs-instance#section-jyi-hyd-hbr).', example='-t nfs -o vers=4'),
  volumeMountpoint?: string(name='VolumeMountpoint', description='The mount target of the NAS file system. The mount target is of the VPC type. Take note of the following information:

*   If the VolumeId parameter is not specified, you can leave the VolumeMountpoint parameter empty. In this case, a mount target is created by default.
*   When the VolumeId parameter is specified, the VolumeMountpoint parameter is required. You can call the [ListFileSystemWithMountTargets](https://help.aliyun.com/document_detail/204364.html) operation to query available mount targets.', example='008b648bcb-s****.cn-hangzhou.nas.aliyuncs.com'),
  volumeProtocol?: string(name='VolumeProtocol', description='The type of the protocol that is used by the NAS file system. Valid values:

*   NFS
*   SMB

Default value: NFS.', example='NFS'),
  volumeType?: string(name='VolumeType', description='The type of the shared storage. Set the value to `nas`, which indicates NAS file system.', example='nas'),
  vpcId?: string(name='VpcId', description='The ID of the virtual private cloud (VPC) to which the E-HPC cluster belongs.

You can call the [DescribeVpcs](https://help.aliyun.com/document_detail/35739.html) operation to query available VPCs.', example='vpc-b3f3edefefeep0760yju****'),
  withoutAgent?: boolean(name='WithoutAgent', description='Specifies whether not to install the agent.

*   true: does not install the agent.
*   false: installs the agent.

Default value: false.', example='false'),
  withoutElasticIp?: boolean(name='WithoutElasticIp', description='Specifies whether the logon node uses an elastic IP address (EIP). Default value: false.

Valid values:

*   true
*   false', example='true'),
  withoutNas?: boolean(name='WithoutNas', description='Indicates whether to use NAS as a shared storage. Valid values:

*   true: does not use NAS.
*   false: use NAS.

Default value: false.', example='false'),
  zoneId?: string(name='ZoneId', description='The ID of the zone in which the resource resides.

You can call the [ListRegions](https://help.aliyun.com/document_detail/188593.html) and [DescribeZones](https://help.aliyun.com/document_detail/25610.html) operations to query the IDs of the zones where E-HPC is supported.', example='cn-hangzhou-b'),
}

model CreateClusterResponseBody = {
  clusterId?: string(name='ClusterId', description='The cluster ID.', example='ehpc-hz-FYUr32****'),
  requestId?: string(name='RequestId', description='The request ID.', example='F6757FA4-8FED-4602-B7F5-3550C084****'),
  taskId?: string(name='TaskId', description='The task ID.

>  CreateCluster is an asynchronous operation. A response is returned if the request succeeds. However, this does not mean that a cluster is created. You can call the [ListTasks](https://help.aliyun.com/document_detail/268225.html) operation to query the result of the task.', example='F6757FA4-8FED-4602-B7F5-3550C084****'),
}

model CreateClusterResponse = {
  headers?: map[string]string(name='headers'),
  statusCode?: int32(name='statusCode'),
  body?: CreateClusterResponseBody(name='body'),
}

/**
 * @summary Creates a pay-as-you-go or subscription E-HPC cluster.
 *
 * @description After you create an Elastic High Performance Computing (E-HPC) cluster, you are charged for the cluster resources that you use. We recommend that you learn about the billing methods of E-HPC in advance. For more information, see [Billing overview](https://help.aliyun.com/document_detail/57844.html).
 *
 * @param request CreateClusterRequest
 * @param runtime runtime options for this request RuntimeOptions
 * @return CreateClusterResponse
 */
async function createClusterWithOptions(request: CreateClusterRequest, runtime: $RuntimeOptions): CreateClusterResponse {
  request.validate();
  var query = OpenApiUtil.query(request.toMap());
  var req = new OpenApiUtil.OpenApiRequest{ 
    query = OpenApiUtil.query(query),
  };
  var params = new OpenApiUtil.Params{
    action = 'CreateCluster',
    version = '2018-04-12',
    protocol = 'HTTPS',
    pathname = '/',
    method = 'GET',
    authType = 'AK',
    style = 'RPC',
    reqBodyType = 'formData',
    bodyType = 'json',
  };
  return callApi(params, req, runtime);
}

/**
 * @summary Creates a pay-as-you-go or subscription E-HPC cluster.
 *
 * @description After you create an Elastic High Performance Computing (E-HPC) cluster, you are charged for the cluster resources that you use. We recommend that you learn about the billing methods of E-HPC in advance. For more information, see [Billing overview](https://help.aliyun.com/document_detail/57844.html).
 *
 * @param request CreateClusterRequest
 * @return CreateClusterResponse
 */
async function createCluster(request: CreateClusterRequest): CreateClusterResponse {
  var runtime = new $RuntimeOptions{};
  return createClusterWithOptions(request, runtime);
}

model CreateHybridClusterRequest {
  ecsOrder?: {
    compute?: {
        instanceType?: string(name='InstanceType', description='The instance type of the compute nodes.

This parameter is required.', example='ecs.n1.tiny'),
    }(name='Compute'),
    manager?: {
        instanceType?: string(name='InstanceType', description='The instance type of the management node. Only Proxy Mode is supported.', example='ecs.n1.tiny'),
    }(name='Manager'),
  }(name='EcsOrder'),
  application?: [ 
    {
      tag?: string(name='Tag', description='The tag of the software.', example='OpenMPI_11.1'),
    }
  ](name='Application', description='An array that consists of the information about the software.'),
  clientToken?: string(name='ClientToken', description='The client token that is used to ensure the idempotence of the request. You can use the client to generate the token, but make sure that the token is unique among different requests. The token can contain only ASCII characters and cannot exceed 64 characters in length. For more information, see [How do I ensure the idempotence of a request?](https://help.aliyun.com/document_detail/25693.html)', example='123e4567-e89b-12d3-a456-426655440000'),
  clientVersion?: string(name='ClientVersion', description='The version of the client. By default, the latest version is used.', example='1.0.64'),
  computeSpotPriceLimit?: float(name='ComputeSpotPriceLimit', description='The maximum hourly price for the ECS instance under the compute node. A maximum of three decimal places can be used in the value of the parameter. The parameter is valid only when the ComputeSpotStrategy parameter is set to SpotWithPriceLimit.', example='0.034'),
  computeSpotStrategy?: string(name='ComputeSpotStrategy', description='The preemption policy of the compute nodes. Valid values:

*   NoSpot: The compute nodes are pay-as-you-go instances.
*   SpotWithPriceLimit: The instance is created as a preemptible instance with a user-defined maximum hourly price.
*   SpotAsPriceGo: The instance is created as a preemptible instance for which the market price at the time of purchase is automatically used as the bidding price.

Default value: NoSpot.', example='NoSpot'),
  description?: string(name='Description', description='The description of the E-HPC cluster. The description must be 2 to 256 characters in length and cannot start with `http://` or` https://`.

This parameter is empty by default.', example='TestDescription'),
  domain?: string(name='Domain', description='The type of the domain account service. Valid values:

*   nis
*   ldap

Default value: nis.', example='nis'),
  ehpcVersion?: string(name='EhpcVersion', description='The version of E-HPC. By default, the latest version is used.', example='1.0.0'),
  hybridClusterOpMode?: string(name='HybridClusterOpMode', description='The mode in which the proxy node manages the offline nodes. Valid values:

*   SSH: indicates management via SSH logon.
*   CA: indicates management through Cloud Assistant.', example='SSH'),
  imageId?: string(name='ImageId', description='The IDs of the images.', example='wi_1607_x64_dtc_zh_40G_alibase****'),
  imageOwnerAlias?: string(name='ImageOwnerAlias', description='The type of the image. Valid values:

*   system: public image
*   self: custom image
*   others: shared image
*   marketplace: Alibaba Cloud Marketplace image', example='system'),
  jobQueue?: string(name='JobQueue', description='The default queue of the scale-out nodes.', example='workq'),
  keyPairName?: string(name='KeyPairName', description='The name of the key pair. The name must be 2 to 128 characters in length, and can contain letters, digits, colons (:), underscores (_), and hyphens (-). It must start with a letter and cannot start with http:// or https://.[](http://https://。、（:）、（_）（-）。)

> To use an SSH key pair, see [Create an SSH key pair](https://help.aliyun.com/document_detail/51793.html).', example='test'),
  location?: string(name='Location', description='The location where the cluster resides. Set the value to OnPremise.', example='OnPremise'),
  multiOs?: boolean(name='MultiOs', description='Specifies whether the cluster supports multiple operating systems. Valid values:

*   true
*   false

Default value: false.', example='false'),
  name?: string(name='Name', description='The name of the cluster. The name must be 2 to 64 characters in length, and can contain only letters, digits, hyphens (-), and underscores (_). It must start with a letter.

This parameter is required.', example='hybridcluster'),
  nodes?: [ 
    {
      accountType?: string(name='AccountType', description='The service type of the domain account to which the on-premises node in the cluster belongs. Valid values:

*   nis
*   ldap

Default value: nis.', example='nis'),
      dir?: string(name='Dir', description='The directory of the on-premises node in the cluster.', example='/opt/sge/default/'),
      hostName?: string(name='HostName', description='The hostname of the on-premises node in the cluster.', example='test1'),
      ipAddress?: string(name='IpAddress', description='The IP address of the on-premises node in the cluster.', example='00b648b****'),
      role?: string(name='Role', description='The role of the on-premises node in the cluster. Valid values:

*   Manager: management node
*   Login: logon node
*   Compute: compute node', example='Compute'),
      schedulerType?: string(name='SchedulerType', description='The scheduler type of the on-premises node in the cluster. Valid values:

*   pbs
*   slurm
*   opengridscheduler
*   deadline

Default value: pbs.', example='pbs'),
    }
  ](name='Nodes', description='The information about the nodes in the local cluster.'),
  onPremiseVolumeLocalPath?: string(name='OnPremiseVolumeLocalPath', description='The path in which the on-premises file system is mounted on the nodes on the cloud.', example='/OnCloudDirectory'),
  onPremiseVolumeMountPoint?: string(name='OnPremiseVolumeMountPoint', description='The mount target of the on-premises file system.', example='RemoteNasDomain.com'),
  onPremiseVolumeProtocol?: string(name='OnPremiseVolumeProtocol', description='The type of the protocol that is used by the on-premises file system. Only NFS is supported.', example='NFS'),
  onPremiseVolumeRemotePath?: string(name='OnPremiseVolumeRemotePath', description='The mount path of the on-premises file system.', example='/RemoteDirectory'),
  openldapPar?: {
    baseDn?: string(name='BaseDn', description='The BaseDN of the LDAP server.', example='ehpctest'),
    fallbackHomeDir?: string(name='FallbackHomeDir', description='The home directory of the Linux server.', example='/home'),
    ldapServerIp?: string(name='LdapServerIp', description='The IP address of the LDAP server.', example='192.168.1.2'),
  }(name='OpenldapPar', description='The parameter that is used to connect to the OpenLDAP server.'),
  osTag?: string(name='OsTag', description='The image tag of the operating system. You can call the [ListImages](https://help.aliyun.com/document_detail/87213.html) operation to query the image tag.

This parameter is required.', example='CentOS_7.2_64'),
  password?: string(name='Password', description='The root password of the logon node. The password must be 8 to 30 characters in length and contain at least three of the following items: uppercase letters, lowercase letters, digits, and special characters. The following special characters are supported: `() ~ ! @ # $ % ^ & * - = + | { } [ ] : ; ‘ < > , . ? /`

> We recommend that you use HTTPS to call the API operation to prevent password leakage.', example='123****'),
  plugin?: string(name='Plugin', description='The mode configurations of the plug-in. This parameter takes effect only when the SchedulerType parameter is set to custom.

The value must be a JSON string. The parameter contains the following parameters: pluginMod, pluginLocalPath, and pluginOssPath.

*   pluginMod: the mode of the plug-in. The following modes are supported:

    *   oss: The plug-in is downloaded and decompressed from OSS to a local path. The local path is specified by the pluginLocalPath parameter.
    *   image: By default, the plug-in is stored in a pre-defined local path. The local path is specified by the pluginLocalPath parameter.

*   pluginLocalPath: the local path where the plug-in is stored. We recommend that you select a shared directory in oss mode and a non-shared directory in image mode.

*   pluginOssPath: the remote path where the plug-in is stored in OSS. This parameter takes effect only when the pluginMod parameter is set to oss.', example='{"pluginMod": "oss","pluginLocalPath": "/opt/plugin","pluginOssPath": "https://bucket.oss-cn-hangzhou.aliyuncs.com/plugin/plugin.tgz"}'),
  postInstallScript?: [ 
    {
      args?: string(name='Args', description='The parameter that is used to run the script after the cluster is created.', example='bash file.sh'),
      url?: string(name='Url', description='The full path of the post-installation script.', example='/opt/job.sh'),
    }
  ](name='PostInstallScript', description='The list of post-installation script information.'),
  remoteDirectory?: string(name='RemoteDirectory', description='The remote directory to which the file system is mounted.', example='/RemoteDirectory'),
  resourceGroupId?: string(name='ResourceGroupId', description='The ID of the resource group.', example='rg-acfmxazb4ph****'),
  schedulerPreInstall?: boolean(name='SchedulerPreInstall', description='Specifies whether the scheduler is preinstalled for the image. Valid values:

*   true: The scheduler is preinstalled. When you create or add a node, you do not need to install the scheduler.
*   false: The scheduler is not preinstalled. When you create or add a cluster, you must install the scheduler.', example='true'),
  securityGroupId?: string(name='SecurityGroupId', description='You can select an existing security group by its ID.

> If you specify this parameter, you cannot specify the `SecurityGroupName`  parameter.', example='sg-bp13n61xsydodfyg****'),
  securityGroupName?: string(name='SecurityGroupName', description='If you do not use an existing security group, set the parameter to the name of a new security group. A default policy is applied to the new security group.

> If you specify this parameter, you cannot specify the `SecurityGroupId` parameter.', example='ehpc-SecurityGroup'),
  vSwitchId?: string(name='VSwitchId', description='The ID of the vSwitch to which the instance connects to.

This parameter is required.', example='vsw-bp1lfcjbfb099rrjn****'),
  volumeId?: string(name='VolumeId', description='The ID of the file system. NAS file systems cannot be automatically created.', example='008b64****'),
  volumeMountpoint?: string(name='VolumeMountpoint', description='The mount target of the NAS file system. The mount target is of the VPC type. Mount targets cannot be automatically created for NAS file systems.', example='008b648bcb-s****.cn-hangzhou.nas.aliyuncs.com'),
  volumeProtocol?: string(name='VolumeProtocol', description='The type of the protocol that is used by the NAS file system. Only NFS is supported.', example='NFS'),
  volumeType?: string(name='VolumeType', description='The type of the file system. Only NAS file systems are supported.', example='NAS'),
  vpcId?: string(name='VpcId', description='The ID of the virtual private cloud (VPC) to which the E-HPC cluster belongs.

This parameter is required.', example='vpc-b3f3edefefeep0760yju****'),
  winAdPar?: {
    adDc?: string(name='AdDc', description='The name of the AD domain.', example='ad-hybrid001.ehpcad.com'),
    adIp?: string(name='AdIp', description='The IP address of the AD domain.', example='192.168.1.2'),
    adUser?: string(name='AdUser', description='The AD user.', example='Administrator'),
    adUserPasswd?: string(name='AdUserPasswd', description='The password of the AD user.', example='xxxxxx'),
  }(name='WinAdPar', description='The parameter that is used to connect to the Windows AD server.'),
  zoneId?: string(name='ZoneId', description='The ID of the zone.', example='cn-hangzhou-b'),
}

model CreateHybridClusterResponseBody = {
  clusterId?: string(name='ClusterId', description='The ID of cluster.', example='ehpc-hz-FYUr32****'),
  requestId?: string(name='RequestId', description='The ID of the request.', example='F6757FA4-8FED-4602-B7F5-3550C0842122'),
  taskId?: string(name='TaskId', description='The ID of the task.', example='F6757FA4-8FED-4602-B7F5-3550C0842122'),
}

model CreateHybridClusterResponse = {
  headers?: map[string]string(name='headers'),
  statusCode?: int32(name='statusCode'),
  body?: CreateHybridClusterResponseBody(name='body'),
}

/**
 * @summary Creates a hybrid cloud cluster.
 *
 * @param request CreateHybridClusterRequest
 * @param runtime runtime options for this request RuntimeOptions
 * @return CreateHybridClusterResponse
 */
async function createHybridClusterWithOptions(request: CreateHybridClusterRequest, runtime: $RuntimeOptions): CreateHybridClusterResponse {
  request.validate();
  var query = OpenApiUtil.query(request.toMap());
  var req = new OpenApiUtil.OpenApiRequest{ 
    query = OpenApiUtil.query(query),
  };
  var params = new OpenApiUtil.Params{
    action = 'CreateHybridCluster',
    version = '2018-04-12',
    protocol = 'HTTPS',
    pathname = '/',
    method = 'GET',
    authType = 'AK',
    style = 'RPC',
    reqBodyType = 'formData',
    bodyType = 'json',
  };
  return callApi(params, req, runtime);
}

/**
 * @summary Creates a hybrid cloud cluster.
 *
 * @param request CreateHybridClusterRequest
 * @return CreateHybridClusterResponse
 */
async function createHybridCluster(request: CreateHybridClusterRequest): CreateHybridClusterResponse {
  var runtime = new $RuntimeOptions{};
  return createHybridClusterWithOptions(request, runtime);
}

model CreateJobFileRequest {
  async?: boolean(name='Async', description='Indicates whether to use an asynchronous link to submit job files.

Default value: false.', example='false'),
  clusterId?: string(name='ClusterId', description='The ID of the E-HPC cluster.

You can call the [ListClusters](https://help.aliyun.com/document_detail/87116.html) operation to query the cluster ID.

This parameter is required.', example='ehpc-hz-jeJki6****'),
  content?: string(name='Content', description='The content of the job file. The content is encoded in Base64.

This parameter is required.', example='c2xlZXAgMzA='),
  runasUser?: string(name='RunasUser', description='The user to which the job file belongs.

You can call the [ListUsers](https://help.aliyun.com/document_detail/188572.html) operation to query the users of the cluster.

This parameter is required.', example='testuser1'),
  runasUserPassword?: string(name='RunasUserPassword', description='The user password.', example='!QAZ****'),
  targetFile?: string(name='TargetFile', description='The name of the job file.

This parameter is required.', example='lammps.pbs'),
}

model CreateJobFileResponseBody = {
  requestId?: string(name='RequestId', description='The request ID.', example='04F0F334-1335-436C-A1D7-6C044FE7****'),
}

model CreateJobFileResponse = {
  headers?: map[string]string(name='headers'),
  statusCode?: int32(name='statusCode'),
  body?: CreateJobFileResponseBody(name='body'),
}

/**
 * @summary Creates a job file.
 *
 * @param request CreateJobFileRequest
 * @param runtime runtime options for this request RuntimeOptions
 * @return CreateJobFileResponse
 */
async function createJobFileWithOptions(request: CreateJobFileRequest, runtime: $RuntimeOptions): CreateJobFileResponse {
  request.validate();
  var query = OpenApiUtil.query(request.toMap());
  var req = new OpenApiUtil.OpenApiRequest{ 
    query = OpenApiUtil.query(query),
  };
  var params = new OpenApiUtil.Params{
    action = 'CreateJobFile',
    version = '2018-04-12',
    protocol = 'HTTPS',
    pathname = '/',
    method = 'GET',
    authType = 'AK',
    style = 'RPC',
    reqBodyType = 'formData',
    bodyType = 'json',
  };
  return callApi(params, req, runtime);
}

/**
 * @summary Creates a job file.
 *
 * @param request CreateJobFileRequest
 * @return CreateJobFileResponse
 */
async function createJobFile(request: CreateJobFileRequest): CreateJobFileResponse {
  var runtime = new $RuntimeOptions{};
  return createJobFileWithOptions(request, runtime);
}

model CreateJobTemplateRequest {
  arrayRequest?: string(name='ArrayRequest', description='The job array.

Format: X-Y:Z. X is the minimum index value. Y is the maximum index value. Z is the step size. For example, 2-7:2 indicates that three jobs need to be run and their index values are 2, 4, and 6.', example='1-10:2'),
  clockTime?: string(name='ClockTime', description='The maximum running time of the job. Valid formats:

*   hh:mm:ss
*   mm:ss
*   ss

We recommend that you use the hh:mm:ss format. If the maximum running time is 12 hours, set the value to 12:00:00.', example='12:00:00'),
  commandLine?: string(name='CommandLine', description='The command that is used to run the job.

This parameter is required.', example='./LammpsTest/lammps.pbs'),
  gpu?: int32(name='Gpu', description='The maximum GPU usage required by a single compute node. Valid values: 1 to 8.

The parameter takes effect only when the cluster uses PBS and a compute node is a GPU-accelerated instance.', example='1'),
  inputFileUrl?: string(name='InputFileUrl', description='The URL of the job files that are uploaded to an Object Storage Service (OSS) bucket.', example='https://test.oss-cn-beijing.aliyuncs.com/test.py'),
  mem?: string(name='Mem', description='The maximum memory usage required by a single compute node. Unit: GB, MB, or KB. The unit is case-insensitive.', example='1GB'),
  name?: string(name='Name', description='The name of the job template. The name must be 2 to 64 characters in length. It must start with a letter and can contain letters, digits, hyphens (-), and underscores (_).

This parameter is required.', example='jobtemplate1'),
  node?: int32(name='Node', description='The number of compute nodes. Valid values: 1 to 500.

>  If you do not specify this parameter, the Task, Thread, Mem, or GPU parameters do not take effect.', example='2'),
  packagePath?: string(name='PackagePath', description='The path that is used to run the job.', example='./jobfolder'),
  priority?: int32(name='Priority', description='The priority of the job. Valid values: 0 to 9. A larger value indicates a higher priority.

Default value: 0.', example='0'),
  queue?: string(name='Queue', description='The name of the queue in which the job is run.

You can call the [ListQueues](https://help.aliyun.com/document_detail/92176.html) operation to query the name of the queue.', example='workq'),
  reRunable?: boolean(name='ReRunable', description='Specifies whether to automatically rerun the job after the job fails. Valid value:

*   true: reruns the job.
*   false: does not rerun the job.', example='false'),
  runasUser?: string(name='RunasUser', description='The name of the user that runs the job.

You can call the [ListUsers](https://help.aliyun.com/document_detail/188572.html) operation to query the users of the cluster.', example='user1'),
  stderrRedirectPath?: string(name='StderrRedirectPath', description='The output file path of stderr.', example='./LammpsTest'),
  stdoutRedirectPath?: string(name='StdoutRedirectPath', description='The output file path of stdout.', example='./LammpsTest'),
  task?: int32(name='Task', description='The number of tasks required by a single compute node. Valid values: 1 to 1000.', example='2'),
  thread?: int32(name='Thread', description='The number of threads required by a single compute node. Valid values: 1 to 1000.', example='1'),
  unzipCmd?: string(name='UnzipCmd', description='The command that is used to decompress the job files downloaded from an OSS bucket. The parameter takes effect only when WithUnzipCmd is set to true. Valid values:

*   tar xzf: decompresses GZIP files.
*   tar xf: decompresses TAR files.
*   unzip: decompresses ZIP files.', example='tar xzf'),
  variables?: string(name='Variables', description='The runtime variables passed to the job. They can be accessed by using environment variables in the executable file.', example='[{Name:,Value:},{Name:,Value:}]'),
  withUnzipCmd?: boolean(name='WithUnzipCmd', description='Specifies whether to decompress the job files downloaded from an OSS bucket. Valid values:

*   true: decompresses the job file.
*   false: does not decompress the job file.', example='true'),
}

model CreateJobTemplateResponseBody = {
  requestId?: string(name='RequestId', description='The request ID.', example='04F0F334-1335-436C-A1D7-6C044FE7****'),
  templateId?: string(name='TemplateId', description='The ID of the job template.', example='ehpc-job-tmpl-6RxO5y****'),
}

model CreateJobTemplateResponse = {
  headers?: map[string]string(name='headers'),
  statusCode?: int32(name='statusCode'),
  body?: CreateJobTemplateResponseBody(name='body'),
}

/**
 * @summary Creates a job template.
 *
 * @param request CreateJobTemplateRequest
 * @param runtime runtime options for this request RuntimeOptions
 * @return CreateJobTemplateResponse
 */
async function createJobTemplateWithOptions(request: CreateJobTemplateRequest, runtime: $RuntimeOptions): CreateJobTemplateResponse {
  request.validate();
  var query = OpenApiUtil.query(request.toMap());
  var req = new OpenApiUtil.OpenApiRequest{ 
    query = OpenApiUtil.query(query),
  };
  var params = new OpenApiUtil.Params{
    action = 'CreateJobTemplate',
    version = '2018-04-12',
    protocol = 'HTTPS',
    pathname = '/',
    method = 'GET',
    authType = 'AK',
    style = 'RPC',
    reqBodyType = 'formData',
    bodyType = 'json',
  };
  return callApi(params, req, runtime);
}

/**
 * @summary Creates a job template.
 *
 * @param request CreateJobTemplateRequest
 * @return CreateJobTemplateResponse
 */
async function createJobTemplate(request: CreateJobTemplateRequest): CreateJobTemplateResponse {
  var runtime = new $RuntimeOptions{};
  return createJobTemplateWithOptions(request, runtime);
}

model DeleteClusterRequest {
  clusterId?: string(name='ClusterId', description='The ID of the cluster.

You can call the [ListClusters](https://help.aliyun.com/document_detail/87116.html) operation to obtain cluster IDs.

This parameter is required.', example='ehpc-hz-QKKVqO****'),
  releaseInstance?: string(name='ReleaseInstance', description='Specifies whether to release Elastic Compute Service (ECS) instances that are created by using Elastic High Performance Computing (E-HPC).

Default value: true.', example='true'),
}

model DeleteClusterResponseBody = {
  requestId?: string(name='RequestId', description='The request ID.', example='F1AB6D8D-E185-4D94-859C-7CE7B8B7****'),
  taskId?: string(name='TaskId', description='The task ID.', example='F1AB6D8D-E185-4D94-859C-7CE7B8B7****'),
}

model DeleteClusterResponse = {
  headers?: map[string]string(name='headers'),
  statusCode?: int32(name='statusCode'),
  body?: DeleteClusterResponseBody(name='body'),
}

/**
 * @summary Releases a cluster.
 *
 * @description After a cluster is released, the pay-as-you-go nodes and the subscription nodes that are expired are automatically released. The subscription nodes that are expired are retained. If you need to release subscription nodes that are not expired, change the billing method to pay-as-you-go. Before you release a cluster, make sure that you no longer use the cluster.
 *
 * @param request DeleteClusterRequest
 * @param runtime runtime options for this request RuntimeOptions
 * @return DeleteClusterResponse
 */
async function deleteClusterWithOptions(request: DeleteClusterRequest, runtime: $RuntimeOptions): DeleteClusterResponse {
  request.validate();
  var query = OpenApiUtil.query(request.toMap());
  var req = new OpenApiUtil.OpenApiRequest{ 
    query = OpenApiUtil.query(query),
  };
  var params = new OpenApiUtil.Params{
    action = 'DeleteCluster',
    version = '2018-04-12',
    protocol = 'HTTPS',
    pathname = '/',
    method = 'GET',
    authType = 'AK',
    style = 'RPC',
    reqBodyType = 'formData',
    bodyType = 'json',
  };
  return callApi(params, req, runtime);
}

/**
 * @summary Releases a cluster.
 *
 * @description After a cluster is released, the pay-as-you-go nodes and the subscription nodes that are expired are automatically released. The subscription nodes that are expired are retained. If you need to release subscription nodes that are not expired, change the billing method to pay-as-you-go. Before you release a cluster, make sure that you no longer use the cluster.
 *
 * @param request DeleteClusterRequest
 * @return DeleteClusterResponse
 */
async function deleteCluster(request: DeleteClusterRequest): DeleteClusterResponse {
  var runtime = new $RuntimeOptions{};
  return deleteClusterWithOptions(request, runtime);
}

model DeleteJobTemplatesRequest {
  templates?: string(name='Templates', description='The IDs of the job templates that you want to delete. You can specify a maximum of 20 job template IDs.

Format of job template IDs: `[{"Id": "0.sched****"},{"Id": "1.sched****"}]`. Separate multiple job template IDs with commas (,).

You can call the [ListJobTemplates](https://help.aliyun.com/document_detail/87248.html) operation to query job template IDs.

This parameter is required.', example='[{"Id":"ehpc-job-tmpl-6RVcMK****"},{"Id": "ehpc-job-tmpl-6RxO5y****"}]'),
}

model DeleteJobTemplatesResponseBody = {
  requestId?: string(name='RequestId', description='The request ID.', example='04F0F334-1335-436C-A1D7-6C044FE7****'),
}

model DeleteJobTemplatesResponse = {
  headers?: map[string]string(name='headers'),
  statusCode?: int32(name='statusCode'),
  body?: DeleteJobTemplatesResponseBody(name='body'),
}

/**
 * @summary Deletes job templates.
 *
 * @param request DeleteJobTemplatesRequest
 * @param runtime runtime options for this request RuntimeOptions
 * @return DeleteJobTemplatesResponse
 */
async function deleteJobTemplatesWithOptions(request: DeleteJobTemplatesRequest, runtime: $RuntimeOptions): DeleteJobTemplatesResponse {
  request.validate();
  var query = OpenApiUtil.query(request.toMap());
  var req = new OpenApiUtil.OpenApiRequest{ 
    query = OpenApiUtil.query(query),
  };
  var params = new OpenApiUtil.Params{
    action = 'DeleteJobTemplates',
    version = '2018-04-12',
    protocol = 'HTTPS',
    pathname = '/',
    method = 'GET',
    authType = 'AK',
    style = 'RPC',
    reqBodyType = 'formData',
    bodyType = 'json',
  };
  return callApi(params, req, runtime);
}

/**
 * @summary Deletes job templates.
 *
 * @param request DeleteJobTemplatesRequest
 * @return DeleteJobTemplatesResponse
 */
async function deleteJobTemplates(request: DeleteJobTemplatesRequest): DeleteJobTemplatesResponse {
  var runtime = new $RuntimeOptions{};
  return deleteJobTemplatesWithOptions(request, runtime);
}

model DeleteJobsRequest {
  async?: boolean(name='Async', description='Specifies whether to use an asynchronous link to delete the jobs.

Default value: false.', example='false'),
  clusterId?: string(name='ClusterId', description='The ID of the E-HPC cluster.

You can call the [ListClusters](https://help.aliyun.com/document_detail/87116.html) operation to query the cluster ID.

This parameter is required.', example='ehpc-hz-FYUr32****'),
  jobs?: string(name='Jobs', description='The list of jobs that you want to delete. Maximum number of jobs: 100. Minimum number of jobs: 1.

Format: `[{"Id": "0.sched****"},{"Id": "1.sched****"}]`. Separate multiple jobs with commas (,).

You can call the [ListJobs](https://help.aliyun.com/document_detail/87251.html) operation to query the job ID.

This parameter is required.', example='[{"Id": "0.sched****"},{"Id": "1.sched****"}]'),
}

model DeleteJobsResponseBody = {
  requestId?: string(name='RequestId', description='The request ID.', example='04F0F334-1335-436C-A1D7-6C044FE7****'),
}

model DeleteJobsResponse = {
  headers?: map[string]string(name='headers'),
  statusCode?: int32(name='statusCode'),
  body?: DeleteJobsResponseBody(name='body'),
}

/**
 * @summary Deletes jobs from a cluster.
 *
 * @param request DeleteJobsRequest
 * @param runtime runtime options for this request RuntimeOptions
 * @return DeleteJobsResponse
 */
async function deleteJobsWithOptions(request: DeleteJobsRequest, runtime: $RuntimeOptions): DeleteJobsResponse {
  request.validate();
  var query = OpenApiUtil.query(request.toMap());
  var req = new OpenApiUtil.OpenApiRequest{ 
    query = OpenApiUtil.query(query),
  };
  var params = new OpenApiUtil.Params{
    action = 'DeleteJobs',
    version = '2018-04-12',
    protocol = 'HTTPS',
    pathname = '/',
    method = 'GET',
    authType = 'AK',
    style = 'RPC',
    reqBodyType = 'formData',
    bodyType = 'json',
  };
  return callApi(params, req, runtime);
}

/**
 * @summary Deletes jobs from a cluster.
 *
 * @param request DeleteJobsRequest
 * @return DeleteJobsResponse
 */
async function deleteJobs(request: DeleteJobsRequest): DeleteJobsResponse {
  var runtime = new $RuntimeOptions{};
  return deleteJobsWithOptions(request, runtime);
}

model DeleteNodesRequest {
  clusterId?: string(name='ClusterId', description='The ID of the cluster.

You can call the [ListClusters](https://help.aliyun.com/document_detail/87116.html) operation to query the cluster ID.

This parameter is required.', example='ehpc-hz-FYUr32****'),
  instance?: [ 
    {
      id?: string(name='Id', description='The ID of the compute node that you want to delete. Valid values of N: 1 to 100.

You can call the [DescribeCluster](https://help.aliyun.com/document_detail/87126.html) operation to query the IDs of the nodes in the cluster.', example='i-bp13p7vlcb1uihfv****'),
    }
  ](name='Instance', description='This parameter is required.'),
  releaseInstance?: boolean(name='ReleaseInstance', description='Specifies whether to release the instances that are created by using E-HPC.

Default value: true', example='true'),
  sync?: boolean(name='Sync', description='Specifies whether to directly delete the node. Valid values:

*   true
*   false', example='false'),
}

model DeleteNodesResponseBody = {
  requestId?: string(name='RequestId', description='The ID of the request.', example='04F0F334-1335-436C-A1D7-6C044FE7****'),
  taskId?: string(name='TaskId', description='The ID of the task.

*   If you set the Sync parameter to true, the DeleteNodes operation is synchronous. Valid value: Not Available.
*   If you set the Sync parameter to false, the DeleteNodes operation is asynchronous. You can call the [ListTasks](https://help.aliyun.com/document_detail/268225.html) operation to query the result of the task.', example='04F0F334-1335-436C-A1D7-6C044FE7****'),
}

model DeleteNodesResponse = {
  headers?: map[string]string(name='headers'),
  statusCode?: int32(name='statusCode'),
  body?: DeleteNodesResponseBody(name='body'),
}

/**
 * @description Before you delete a compute node, we recommend that you export all job data from the node to prevent data loss.
 *
 * @param request DeleteNodesRequest
 * @param runtime runtime options for this request RuntimeOptions
 * @return DeleteNodesResponse
 */
async function deleteNodesWithOptions(request: DeleteNodesRequest, runtime: $RuntimeOptions): DeleteNodesResponse {
  request.validate();
  var query = OpenApiUtil.query(request.toMap());
  var req = new OpenApiUtil.OpenApiRequest{ 
    query = OpenApiUtil.query(query),
  };
  var params = new OpenApiUtil.Params{
    action = 'DeleteNodes',
    version = '2018-04-12',
    protocol = 'HTTPS',
    pathname = '/',
    method = 'GET',
    authType = 'AK',
    style = 'RPC',
    reqBodyType = 'formData',
    bodyType = 'json',
  };
  return callApi(params, req, runtime);
}

/**
 * @description Before you delete a compute node, we recommend that you export all job data from the node to prevent data loss.
 *
 * @param request DeleteNodesRequest
 * @return DeleteNodesResponse
 */
async function deleteNodes(request: DeleteNodesRequest): DeleteNodesResponse {
  var runtime = new $RuntimeOptions{};
  return deleteNodesWithOptions(request, runtime);
}

model DeleteQueueRequest {
  clusterId?: string(name='ClusterId', description='The ID of the cluster.

You can call the [ListClusters](https://help.aliyun.com/document_detail/87116.html) operation to query the cluster ID.

This parameter is required.', example='ehpc-hz-FYUr32****'),
  queueName?: string(name='QueueName', description='The name of the queue that you want to delete.

You can call the [ListQueues](https://help.aliyun.com/document_detail/92176.html) operation to query the name of the queue.

This parameter is required.', example='workq'),
}

model DeleteQueueResponseBody = {
  requestId?: string(name='RequestId', description='The ID of the request.', example='464E9919-D04F-4D1D-B375-15989492****'),
}

model DeleteQueueResponse = {
  headers?: map[string]string(name='headers'),
  statusCode?: int32(name='statusCode'),
  body?: DeleteQueueResponseBody(name='body'),
}

/**
 * @param request DeleteQueueRequest
 * @param runtime runtime options for this request RuntimeOptions
 * @return DeleteQueueResponse
 */
async function deleteQueueWithOptions(request: DeleteQueueRequest, runtime: $RuntimeOptions): DeleteQueueResponse {
  request.validate();
  var query = OpenApiUtil.query(request.toMap());
  var req = new OpenApiUtil.OpenApiRequest{ 
    query = OpenApiUtil.query(query),
  };
  var params = new OpenApiUtil.Params{
    action = 'DeleteQueue',
    version = '2018-04-12',
    protocol = 'HTTPS',
    pathname = '/',
    method = 'GET',
    authType = 'AK',
    style = 'RPC',
    reqBodyType = 'formData',
    bodyType = 'json',
  };
  return callApi(params, req, runtime);
}

/**
 * @param request DeleteQueueRequest
 * @return DeleteQueueResponse
 */
async function deleteQueue(request: DeleteQueueRequest): DeleteQueueResponse {
  var runtime = new $RuntimeOptions{};
  return deleteQueueWithOptions(request, runtime);
}

model DeleteSecurityGroupRequest {
  clusterId?: string(name='ClusterId', description='The cluster ID.

This parameter is required.', example='ehpc-hz-FYUr32****'),
  securityGroupId?: string(name='SecurityGroupId', description='The security group ID of the instance.

This parameter is required.', example='sg-bp13n61xsydodfyg****'),
}

model DeleteSecurityGroupResponseBody = {
  requestId?: string(name='RequestId', description='The request ID.', example='04F0F334-1335-436C-A1D7-6C044FE73368'),
}

model DeleteSecurityGroupResponse = {
  headers?: map[string]string(name='headers'),
  statusCode?: int32(name='statusCode'),
  body?: DeleteSecurityGroupResponseBody(name='body'),
}

/**
 * @summary Removes a cluster from a specified security group.
 *
 * @param request DeleteSecurityGroupRequest
 * @param runtime runtime options for this request RuntimeOptions
 * @return DeleteSecurityGroupResponse
 */
async function deleteSecurityGroupWithOptions(request: DeleteSecurityGroupRequest, runtime: $RuntimeOptions): DeleteSecurityGroupResponse {
  request.validate();
  var query = OpenApiUtil.query(request.toMap());
  var req = new OpenApiUtil.OpenApiRequest{ 
    query = OpenApiUtil.query(query),
  };
  var params = new OpenApiUtil.Params{
    action = 'DeleteSecurityGroup',
    version = '2018-04-12',
    protocol = 'HTTPS',
    pathname = '/',
    method = 'GET',
    authType = 'AK',
    style = 'RPC',
    reqBodyType = 'formData',
    bodyType = 'json',
  };
  return callApi(params, req, runtime);
}

/**
 * @summary Removes a cluster from a specified security group.
 *
 * @param request DeleteSecurityGroupRequest
 * @return DeleteSecurityGroupResponse
 */
async function deleteSecurityGroup(request: DeleteSecurityGroupRequest): DeleteSecurityGroupResponse {
  var runtime = new $RuntimeOptions{};
  return deleteSecurityGroupWithOptions(request, runtime);
}

model DeleteUsersRequest {
  async?: boolean(name='Async', description='Specifies whether to enable the asynchronous mode for this request.

Default value: false.', example='false'),
  clusterId?: string(name='ClusterId', description='The cluster ID.

You can call the [ListClusters](https://help.aliyun.com/document_detail/87116.html) operation to obtain the cluster ID.

This parameter is required.', example='ehpc-hz-FYUr32****'),
  user?: [ 
    {
      name?: string(name='Name', description='The name of the user N that you want to delete. Valid values of N: 1 to 100.

You can call the [ListUsers](https://help.aliyun.com/document_detail/188572.html) operation to query the users of the cluster.

This parameter is required.', example='user1'),
    }
  ](name='User', description='The information about the user.

This parameter is required.'),
}

model DeleteUsersResponseBody = {
  requestId?: string(name='RequestId', description='The ID of the request.', example='04F0F334-1335-436C-A1D7-6C044FE****'),
}

model DeleteUsersResponse = {
  headers?: map[string]string(name='headers'),
  statusCode?: int32(name='statusCode'),
  body?: DeleteUsersResponseBody(name='body'),
}

/**
 * @summary Deletes users from a cluster.
 *
 * @description If you delete a user, only its information is deleted. The files stored in the /home directory for the user are retained. For example, if you delete a user named user1, the files in the `/home/user1/` directory of the cluster are not deleted. However, a deleted user cannot be recovered. Even if you create another user that has the same name, the data retained for the deleted user is not reused.
 *
 * @param request DeleteUsersRequest
 * @param runtime runtime options for this request RuntimeOptions
 * @return DeleteUsersResponse
 */
async function deleteUsersWithOptions(request: DeleteUsersRequest, runtime: $RuntimeOptions): DeleteUsersResponse {
  request.validate();
  var query = OpenApiUtil.query(request.toMap());
  var req = new OpenApiUtil.OpenApiRequest{ 
    query = OpenApiUtil.query(query),
  };
  var params = new OpenApiUtil.Params{
    action = 'DeleteUsers',
    version = '2018-04-12',
    protocol = 'HTTPS',
    pathname = '/',
    method = 'GET',
    authType = 'AK',
    style = 'RPC',
    reqBodyType = 'formData',
    bodyType = 'json',
  };
  return callApi(params, req, runtime);
}

/**
 * @summary Deletes users from a cluster.
 *
 * @description If you delete a user, only its information is deleted. The files stored in the /home directory for the user are retained. For example, if you delete a user named user1, the files in the `/home/user1/` directory of the cluster are not deleted. However, a deleted user cannot be recovered. Even if you create another user that has the same name, the data retained for the deleted user is not reused.
 *
 * @param request DeleteUsersRequest
 * @return DeleteUsersResponse
 */
async function deleteUsers(request: DeleteUsersRequest): DeleteUsersResponse {
  var runtime = new $RuntimeOptions{};
  return deleteUsersWithOptions(request, runtime);
}

model DescribeAutoScaleConfigRequest {
  clusterId?: string(name='ClusterId', description='The cluster ID.

This parameter is required.', example='ehpc-hz-FYUr32****'),
}

model DescribeAutoScaleConfigResponseBody = {
  clusterId?: string(name='ClusterId', description='The ID of the associated cluster.', example='ehpc-hz-FYUr32****'),
  clusterType?: string(name='ClusterType', description='The type of the scheduler. Valid values:

*   pbs
*   slurm
*   opengridscheduler
*   deadline', example='slurm'),
  enableAutoGrow?: boolean(name='EnableAutoGrow', description='Specifies whether to enable auto scale-out.', example='true'),
  enableAutoShrink?: boolean(name='EnableAutoShrink', description='Specifies whether to enable auto scale-in.', example='true'),
  excludeNodes?: string(name='ExcludeNodes', description='The list of nodes on which auto scaling is not enabled.', example='i-bp19lgqwxb4206t5****,i-bp1g4hvzs9pywrhb****'),
  extraNodesGrowRatio?: int32(name='ExtraNodesGrowRatio', description='The percentage of extra compute nodes. Valid values: 0 to 100.', example='0'),
  growIntervalInMinutes?: int32(name='GrowIntervalInMinutes', description='The interval between two consecutive rounds of scale-in. Valid values: 2 to 10.', example='10'),
  growRatio?: int32(name='GrowRatio', description='The percentage of each round of scale-out. Valid values: 1 to 100.', example='1'),
  growTimeoutInMinutes?: int32(name='GrowTimeoutInMinutes', description='The timeout period before the scale-out nodes were started. Valid values: 10 to 60.', example='20'),
  maxNodesInCluster?: int32(name='MaxNodesInCluster', description='The maximum number of compute nodes in the cluster. This parameter indicates the largest number of nodes that can be added to the cluster.', example='100'),
  requestId?: string(name='RequestId', description='The request ID.', example='04F0F334-1335-436C-A1D7-6C044FE73'),
  shrinkIdleTimes?: int32(name='ShrinkIdleTimes', description='The number of consecutive idle times of a node during the resource shrink check. Valid values: 2 to 5.', example='3'),
  shrinkIntervalInMinutes?: int32(name='ShrinkIntervalInMinutes', description='The interval between two consecutive rounds of scale-out. Valid values: 2 to 10.', example='2'),
  spotPriceLimit?: string(name='SpotPriceLimit', description='The maximum hourly price of the new ECS instance. The value is accurate to three decimal places. It takes effect only when SpotStrategy is set to SpotWithPriceLimit.', example='0.062'),
  spotStrategy?: string(name='SpotStrategy', description='The bidding method of the compute nodes. Valid values:

*   NoSpot: The instances of the compute node are pay-as-you-go instances.
*   SpotWithPriceLimit: The instance is created as a preemptible instance with a user-defined maximum hourly price.
*   SpotAsPriceGo: The instance is a preemptible instance for which the market price at the time of purchase is automatically used as the bidding price.', example='NoSpot'),
  uid?: string(name='Uid', description='The user ID.', example='testu****'),
}

model DescribeAutoScaleConfigResponse = {
  headers?: map[string]string(name='headers'),
  statusCode?: int32(name='statusCode'),
  body?: DescribeAutoScaleConfigResponseBody(name='body'),
}

/**
 * @summary Queries the auto scaling settings of a cluster.
 *
 * @param request DescribeAutoScaleConfigRequest
 * @param runtime runtime options for this request RuntimeOptions
 * @return DescribeAutoScaleConfigResponse
 */
async function describeAutoScaleConfigWithOptions(request: DescribeAutoScaleConfigRequest, runtime: $RuntimeOptions): DescribeAutoScaleConfigResponse {
  request.validate();
  var query = OpenApiUtil.query(request.toMap());
  var req = new OpenApiUtil.OpenApiRequest{ 
    query = OpenApiUtil.query(query),
  };
  var params = new OpenApiUtil.Params{
    action = 'DescribeAutoScaleConfig',
    version = '2018-04-12',
    protocol = 'HTTPS',
    pathname = '/',
    method = 'GET',
    authType = 'AK',
    style = 'RPC',
    reqBodyType = 'formData',
    bodyType = 'json',
  };
  return callApi(params, req, runtime);
}

/**
 * @summary Queries the auto scaling settings of a cluster.
 *
 * @param request DescribeAutoScaleConfigRequest
 * @return DescribeAutoScaleConfigResponse
 */
async function describeAutoScaleConfig(request: DescribeAutoScaleConfigRequest): DescribeAutoScaleConfigResponse {
  var runtime = new $RuntimeOptions{};
  return describeAutoScaleConfigWithOptions(request, runtime);
}

model DescribeClusterRequest {
  clusterId?: string(name='ClusterId', description='The cluster ID. You can call the [ListClusters](https://help.aliyun.com/document_detail/87116.html) operation to query the list of clusters in a region.

This parameter is required.', example='ehpc-hz-QKKVqO****'),
}

model DescribeClusterResponseBody = {
  clusterInfo?: {
    accountType?: string(name='AccountType', description='The server type of the account. Valid values:

*   nis
*   ldap', example='nis'),
    addOnsInfo?: {
      addOnsInfo?: [ 
      {
        deployMode?: string(name='DeployMode', description='The deployment mode of the custom component. Valid values:

*   local
*   ecs', example='local'),
        port?: int32(name='Port', description='The TCP port number of the custom component.', example='10000'),
        softwareId?: string(name='SoftwareId', description='The software ID of the component.', example='CROMWELL_85'),
        status?: string(name='Status', description='The running status of the custom component. Valid values:

*   running
*   stopped
*   exception', example='running'),
        URL?: string(name='URL', description='The URL of the custom component service.', example='http://172.16.10.12:10000/'),
      }
    ](name='AddOnsInfo')
    }(name='AddOnsInfo', description='The information about the custom component service.'),
    applications?: {
      applicationInfo?: [ 
      {
        name?: string(name='Name', description='The name of the software.', example='openmpi'),
        tag?: string(name='Tag', description='The tag of the software.', example='OpenMPI_1.8.7'),
        version?: string(name='Version', description='The version of the software.', example='1.10'),
      }
    ](name='ApplicationInfo')
    }(name='Applications', description='The array of the software in the cluster. The array contains the name and version of the software.'),
    autoRenew?: string(name='AutoRenew', description='Specifies whether to enable auto-renewal. The parameter takes effect only when EcsChargeType is set to PrePaid. Valid values:

*   true: enables auto-renewal.
*   false: disables auto-renewal.

Default value: true.', example='false'),
    autoRenewPeriod?: string(name='AutoRenewPeriod', description='The auto-renewal period of the subscription compute nodes. The parameter takes effect when AutoRenew is set to true.

*   If PeriodUnit is set to Week, the valid values of the AutoRenewPeriod parameter are 1, 2, and 3.
*   If PeriodUnit is set to Month, the valid values of the AutoRenewPeriod parameter are 1, 2, 3, 6, and 12.

Default value: 1.', example='1'),
    baseOsTag?: string(name='BaseOsTag', description='The image of the cluster.', example='CentOS_7.2_64'),
    clientVersion?: string(name='ClientVersion', description='The version of the E-HPC client.', example='1.0.1'),
    clusterVersion?: string(name='ClusterVersion', description='The version of the E-HPC cluster.', example='1.0'),
    computeSpotPriceLimit?: string(name='ComputeSpotPriceLimit', description='The maximum hourly price of the compute nodes. A maximum of three decimal places can be used in the value of the parameter. The parameter is valid only when the ComputeSpotStrategy parameter is set to SpotWithPriceLimit.', example='0.56'),
    computeSpotStrategy?: string(name='ComputeSpotStrategy', description='The bidding method of the compute node. Valid values:

*   NoSpot: The instance is created as a pay-as-you-go instance.
*   SpotWithPriceLimit: The instance is created as a preemptible instance with a user-defined maximum hourly price.
*   SpotAsPriceGo: The instance is a preemptible instance for which the market price at the time of purchase is automatically used as the bidding price.', example='NoSpot'),
    createTime?: string(name='CreateTime', description='The time at which the instance is created.', example='2020-12-24T03:18:23.000Z'),
    deployMode?: string(name='DeployMode', description='The mode in which the cluster is deployed. Valid values:

*   Standard: An account node, a scheduling node, a logon node, and multiple compute nodes are separately deployed.
*   Advanced: Two high availability (HA) account nodes, two HA scheduler nodes, one logon node, and multiple compute nodes are separately deployed.
*   Simple: A management node, a logon node, and multiple compute nodes are deployed. The management node consists of an account node and a scheduling node. The logon node and compute nodes are separately deployed.
*   Tiny: The account node, scheduling node, and logon node are deployed on one node. The compute node is separately deployed.', example='Simple'),
    description?: string(name='Description', description='The description of the cluster.', example='cluster'),
    domain?: string(name='Domain', description='The domain name of the on-premises E-HPC cluster.

This parameter takes effect only when the AccoutType parameter is set to Idap.', example='ldap'),
    ecsChargeType?: string(name='EcsChargeType', description='The billing method of the nodes in the cluster. Valid values:

*   PostPaid: pay-as-you-go
*   PrePaid: subscription', example='PostPaid'),
    ecsInfo?: {
      compute?: {
        count?: int32(name='Count', description='The number of compute nodes in the cluster.', example='1'),
        instanceType?: string(name='InstanceType', description='The instance type of the compute nodes.', example='ecs.n1.tiny'),
      }(name='Compute', description='The list of compute nodes.'),
      login?: {
        count?: int32(name='Count', description='The number of logon nodes in the cluster.', example='1'),
        instanceType?: string(name='InstanceType', description='The instance type of the logon nodes.', example='ecs.n1.tiny'),
      }(name='Login', description='The list of logon nodes.'),
      manager?: {
        count?: int32(name='Count', description='The number of management nodes.', example='1'),
        instanceType?: string(name='InstanceType', description='The instance type of the management nodes.', example='ecs.n1.tiny'),
      }(name='Manager', description='The information of management nodes.'),
      proxyMgr?: {
        count?: int32(name='Count', description='The number of proxy nodes.', example='1'),
        instanceType?: string(name='InstanceType', description='The instance type of the proxy node.', example='ecs.n1.tiny'),
      }(name='ProxyMgr', description='The list of proxy nodes on the cloud.

This parameter is returned only when the cluster is deployed across hybrid environments and the hybrid-cloud proxy mode is enabled for the cluster.'),
    }(name='EcsInfo', description='The list of ECS instance specifications and quantity.'),
    haEnable?: boolean(name='HaEnable', description='Specifies whether to enable the high availability feature.

>  If high availability is enabled, each management role in the cluster uses both primary and secondary instances.', example='false'),
    id?: string(name='Id', description='The instance ID.', example='i-bp15de54eet1c43f****'),
    imageId?: string(name='ImageId', description='The image ID.', example='centos_7_02_64_20G_alibase_20170818****'),
    imageName?: string(name='ImageName', description='The image name.', example='test_for_Image'),
    imageOwnerAlias?: string(name='ImageOwnerAlias', description='The image type. Valid values:

*   system: public image
*   self: custom image
*   others: shared image
*   marketplace: Alibaba Cloud Marketplace image', example='system'),
    initialImage?: {
      imageId?: string(name='ImageId', description='The image ID.', example='centos_7_6_x64_20G_alibase_20211130.vhd'),
      imageOwnerAlias?: string(name='ImageOwnerAlias', description='The type of the image. Valid values:

*   system: public image
*   self: custom image
*   others: shared image
*   marketplace: Alibaba Cloud Marketplace image', example='system'),
      osTag?: string(name='OsTag', description='An array of OS images that are supported by E-HPC.', example='CentOS_7.6_64'),
    }(name='InitialImage', description='The image information of the operating systems.'),
    keyPairName?: string(name='KeyPairName', description='The name of the AccessKey pair.', example='test'),
    location?: string(name='Location', description='The location where the cluster is deployed. Valid values:

*   OnPremise: The node is deployed on a hybrid cloud.
*   PublicCloud: The cluster is deployed on a public cloud.', example='PublicCloud'),
    name?: string(name='Name', description='The name of the cluster.', example='cluster'),
    nodes?: {
      nodesInfo?: [ 
      {
        accountType?: string(name='AccountType', description='The service type of the domain account to which the node in the on-premises cluster belongs. Valid values:

*   nis
*   ldap

Default value: nis.', example='nis'),
        dir?: string(name='Dir', description='The directory of the node in the on-premises cluster.', example='/opt/sge/default/'),
        hostName?: string(name='HostName', description='The hostname of the node in the on-premises cluster.', example='compute000'),
        ipAddress?: string(name='IpAddress', description='The IP address of the node in the on-premises cluster.', example='192.168.XX.XX'),
        role?: string(name='Role', description='The role of the node in the on-premises cluster. Valid values:

*   Manager: management node
*   Login: logon node
*   Compute: compute node', example='Compute'),
        schedulerType?: string(name='SchedulerType', description='The scheduler type of the node in the on-premises cluster. Valid values:

*   pbs
*   slurm
*   opengridscheduler
*   deadline

Default value: pbs.', example='pbs'),
      }
    ](name='NodesInfo')
    }(name='Nodes', description='The information of the on-premises node in the cluster.'),
    onPremiseInfo?: {
      onPremiseInfo?: [ 
      {
        hostName?: string(name='HostName', description='The hostname of the management node in the on-premises cluster.', example='testecs'),
        IP?: string(name='IP', description='The IP address of the management node in the on-premises cluster.', example='192.168.*.*'),
        type?: string(name='Type', description='The type of the management node in the on-premises cluster. Valid values:

*   scheduler
*   account
*   account, scheduler', example='scheduler'),
      }
    ](name='OnPremiseInfo')
    }(name='OnPremiseInfo', description='The list of on-premises management nodes.

This parameter is returned only when the cluster is deployed across hybrid environments and the hybrid-cloud proxy mode is enabled for the cluster.'),
    openldapPar?: string(name='OpenldapPar', description='The parameter that is used to connect to the OpenLDAP server.', example='{
	"LdapServerIp": "192.168.XX.XX",
	"BaseDn": "ehpctest",
	"FallbackHomeDir": "/home"
}'),
    osTag?: string(name='OsTag', description='The operating system tag of the image.', example='CentOS_7.2_64'),
    period?: string(name='Period', description='The duration of the subscription. The unit of the duration is specified by the `PeriodUnit` parameter.

*   If you set PriceUnit to Year, the valid values of the Period parameter are 1, 2, and 3.
*   If you set PriceUnit to Month, the valid values of the Period parameter are 1, 2, 3, 4, 5, 6, 7, 8, and 9.
*   If you set PriceUnit to Hour, the valid value of the Period parameter is 1.

Default value: 1.', example='1'),
    periodUnit?: string(name='PeriodUnit', description='The unit of the subscription duration. Valid value:

*   Year
*   Month
*   Hour

Default value: Month.', example='Month'),
    plugin?: string(name='Plugin', description='The mode configurations of the plug-in. This parameter takes effect only when the SchedulerType parameter is set to custom.

The value must be a JSON string. The parameter contains the following parameters: pluginMod, pluginLocalPath, and pluginOssPath.

*   pluginMod: the mode of the plug-in. The following modes are supported:

    *   oss: The plug-in is downloaded and decompressed from OSS to a local path that is specified by the pluginLocalPath parameter.
    *   image: By default, the plug-in is stored in a pre-defined local path that is specified by the pluginLocalPath parameter.

*   pluginLocalPath: the local path where the plug-in is stored. We recommend that you select a shared directory in the oss mode and a non-shared directory in the image mode.

*   pluginOssPath: the remote path where the plug-in is stored in OSS. This parameter takes effect only if you set the pluginMod parameter to oss.', example='{\\\\"pluginMod\\\\":\\\\"image\\\\",\\\\"pluginLocalPath\\\\":\\\\"/opt/plugin\\\\"}'),
    postInstallScripts?: {
      postInstallScriptInfo?: [ 
      {
        args?: string(name='Args', description='The parameter used to run the script.', example='bash file.sh'),
        url?: string(name='Url', description='The URL used to download the script.', example='example.com'),
      }
    ](name='PostInstallScriptInfo')
    }(name='PostInstallScripts', description='The list of post-installation scripts'),
    ramNodeTypes?: string(name='RamNodeTypes', description='The node type details of the instance RAM role.', example='["manager", "compute"]'),
    ramRoleName?: string(name='RamRoleName', description='The name of the instance Resource Access Management (RAM) role.', example='AliyunEHPCFullAccess'),
    regionId?: string(name='RegionId', description='The region ID.', example='cn-hangzhou'),
    remoteDirectory?: string(name='RemoteDirectory', description='The remote directory on which the file system is mounted.', example='NasMountpoint:/RemoteDirectory'),
    resourceGroupId?: string(name='ResourceGroupId', description='The resource group ID.', example='rg-aek23szz5i2****'),
    sccClusterId?: string(name='SccClusterId', description='The ID of the Super Computing Cluster (SCC) instance. If the cluster is not an SCC instance, a null string is returned.', example='00b648b****'),
    schedulerPreInstall?: int32(name='SchedulerPreInstall', description='Specifies whether the scheduler is preinstalled for the image. Valid values:

*   true: The scheduler is preinstalled. When you create a node or scale out a cluster, you do not need to install the scheduler.
*   false: The scheduler is not preinstalled. When you create or add a cluster, you must install the scheduler.', example='true'),
    schedulerType?: string(name='SchedulerType', description='The type of the scheduler. Valid values:

*   pbs
*   slurm
*   opengridscheduler
*   deadline', example='pbs'),
    schedulerVersion?: string(name='SchedulerVersion', description='The version of the scheduler.', example='18.1.1'),
    securityGroupId?: string(name='SecurityGroupId', description='The ID of the security group.', example='sg-bp1asugr34gzn****'),
    status?: string(name='Status', description='The status of the cluster. Valid values:

*   uninit: The cluster is not initialized.
*   creating: The cluster is being created.
*   init: The cluster is being initialized.
*   running: The cluster is running.
*   exception: The cluster encounters an exception.
*   releasing: The cluster is being released.', example='creating'),
    vSwitchId?: string(name='VSwitchId', description='The vSwitch ID. E-HPC can be deployed only in VPCs.', example='vsw-bp1e47optm9g58zcu****'),
    volumeId?: string(name='VolumeId', description='The ID of the File Storage NAS file system. NAS file systems cannot be automatically created.', example='008b64****'),
    volumeMountpoint?: string(name='VolumeMountpoint', description='The mount target of the NAS file system. The mount target is of the VPC type. Mount targets cannot be automatically created for NAS file systems.', example='008b648bcb-s****.cn-hangzhou.nas.aliyuncs.com'),
    volumeProtocol?: string(name='VolumeProtocol', description='The type of the protocol that is used by the file system. Valid values:

*   nfs
*   smb', example='nfs'),
    volumeType?: string(name='VolumeType', description='The type of the network shared storage. Valid value: NAS.', example='NAS'),
    vpcId?: string(name='VpcId', description='The VPC ID of the node.', example='vpc-bp1pxkcvmmz53ki89****'),
    winAdPar?: string(name='WinAdPar', description='The parameter that is used to connect to the Windows AD server.', example='{	"AdUser": "Administrator",	"AdUserPasswd": "xxxxxx",	"AdDc": "ad-hybrid001.ehpcad.com",	"AdIp": "192.168.XX.XX"}'),
    withoutAgent?: int32(name='WithoutAgent', description='Specifies whether to not install the agent.', example='false'),
    zoneId?: string(name='ZoneId', description='The zone ID.', example='cn-hangzhou-k'),
  }(name='ClusterInfo', description='The information about the cluster.'),
  requestId?: string(name='RequestId', description='The request ID.', example='04F0F334-1335-436C-A1D7-6C044FE73368'),
}

model DescribeClusterResponse = {
  headers?: map[string]string(name='headers'),
  statusCode?: int32(name='statusCode'),
  body?: DescribeClusterResponseBody(name='body'),
}

/**
 * @summary Queries the details of a cluster.
 *
 * @param request DescribeClusterRequest
 * @param runtime runtime options for this request RuntimeOptions
 * @return DescribeClusterResponse
 */
async function describeClusterWithOptions(request: DescribeClusterRequest, runtime: $RuntimeOptions): DescribeClusterResponse {
  request.validate();
  var query = OpenApiUtil.query(request.toMap());
  var req = new OpenApiUtil.OpenApiRequest{ 
    query = OpenApiUtil.query(query),
  };
  var params = new OpenApiUtil.Params{
    action = 'DescribeCluster',
    version = '2018-04-12',
    protocol = 'HTTPS',
    pathname = '/',
    method = 'GET',
    authType = 'AK',
    style = 'RPC',
    reqBodyType = 'formData',
    bodyType = 'json',
  };
  return callApi(params, req, runtime);
}

/**
 * @summary Queries the details of a cluster.
 *
 * @param request DescribeClusterRequest
 * @return DescribeClusterResponse
 */
async function describeCluster(request: DescribeClusterRequest): DescribeClusterResponse {
  var runtime = new $RuntimeOptions{};
  return describeClusterWithOptions(request, runtime);
}

model DescribeEstackImageRequest {
  pageNumber?: int32(name='PageNumber', description='The page number of the page to return.', example='1'),
  pageSize?: int32(name='PageSize', description='The number of entries per page.', example='10'),
}

model DescribeEstackImageResponseBody = {
  imageList?: {
    imageListInfo?: [ 
    {
      imageName?: string(name='ImageName', description='The image name.', example='tensorflow-21.09-tf1-py3.sif'),
      imageSize?: int32(name='ImageSize', description='The size of the image.', example='65535 GiB'),
      imageType?: string(name='ImageType', description='The type of the image.', example='singularity'),
      imageUrl?: string(name='ImageUrl', description='The download URL of the image.', example='http://xxxx.oss-cn-hangzhou.aliyuncs.com/eStackPackage/singularity/tensorflow-21.09-tf1-py3.sif'),
      recentUpdateTime?: string(name='RecentUpdateTime', description='The time when the image was last modified.', example='2022-05-05T07:10:55.000Z'),
    }
  ](name='ImageListInfo')
  }(name='ImageList', description='The array of base images.'),
  pageNumber?: int32(name='PageNumber', description='The page number returned.', example='1'),
  pageSize?: int32(name='PageSize', description='The number of entries returned per page.', example='10'),
  requestId?: string(name='RequestId', description='The request ID.', example='2D69A58F-345C-4FDE-88E4-BF518948xxxx'),
  totalCount?: int32(name='TotalCount', description='The total number of images.', example='100'),
}

model DescribeEstackImageResponse = {
  headers?: map[string]string(name='headers'),
  statusCode?: int32(name='statusCode'),
  body?: DescribeEstackImageResponseBody(name='body'),
}

/**
 * @summary Queries the base images of Elastic High Performance Computing (E-HPC).
 *
 * @param request DescribeEstackImageRequest
 * @param runtime runtime options for this request RuntimeOptions
 * @return DescribeEstackImageResponse
 */
async function describeEstackImageWithOptions(request: DescribeEstackImageRequest, runtime: $RuntimeOptions): DescribeEstackImageResponse {
  request.validate();
  var query = OpenApiUtil.query(request.toMap());
  var req = new OpenApiUtil.OpenApiRequest{ 
    query = OpenApiUtil.query(query),
  };
  var params = new OpenApiUtil.Params{
    action = 'DescribeEstackImage',
    version = '2018-04-12',
    protocol = 'HTTPS',
    pathname = '/',
    method = 'GET',
    authType = 'AK',
    style = 'RPC',
    reqBodyType = 'formData',
    bodyType = 'json',
  };
  return callApi(params, req, runtime);
}

/**
 * @summary Queries the base images of Elastic High Performance Computing (E-HPC).
 *
 * @param request DescribeEstackImageRequest
 * @return DescribeEstackImageResponse
 */
async function describeEstackImage(request: DescribeEstackImageRequest): DescribeEstackImageResponse {
  var runtime = new $RuntimeOptions{};
  return describeEstackImageWithOptions(request, runtime);
}

model DescribeImagePriceRequest {
  amount?: int32(name='Amount', description='The number of images that you want to purchase. Valid values: 1 to 1000.

Default value: 1.

This parameter is required.', example='2'),
  imageId?: string(name='ImageId', description='The ID of an image.

This parameter is required.', example='m-bp198jigq7l1ga11****'),
  orderType?: string(name='OrderType', description='The type of the order. The order can be set only as a purchase order. Valid value: INSTANCE-BUY.', example='INSTANCE-BUY'),
  period?: int32(name='Period', description='The subscription duration of the read-only instance. Valid values:

*   If PriceUnit is set to Day, the valid values of the Period parameter are 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, and 30.
*   If PriceUnit is set to Month, the valid values of the Period parameter are 1, 2, 3, 4, 5, 6, 7, 8, and 9.
*   If PriceUnit is set to Year, the valid values of the Period parameter are 1, 2, and 3.

Default value: 1.

This parameter is required.', example='1'),
  priceUnit?: string(name='PriceUnit', description='The unit of the subscription duration. Valid values:

*   Day
*   Month
*   Year

Default value: Day.

This parameter is required.', example='Day'),
  skuCode?: string(name='SkuCode', description='The stock keeping unit (SKU) of the image. Valid value: package.

This parameter is required.', example='package'),
}

model DescribeImagePriceResponseBody = {
  amount?: int32(name='Amount', description='The number of instances that are purchased.', example='1'),
  discountPrice?: float(name='DiscountPrice', description='The discount.', example='0'),
  imageId?: string(name='ImageId', description='The ID of the custom image.', example='m-bp198jigq7l1ga11****'),
  originalPrice?: float(name='OriginalPrice', description='The original price of the image.', example='0.8'),
  requestId?: string(name='RequestId', description='The request ID.', example='47ca3ac4-2a03-48f1-8bf2-ba6de0f3****'),
  tradePrice?: float(name='TradePrice', description='The final price of the image.', example='0.8'),
}

model DescribeImagePriceResponse = {
  headers?: map[string]string(name='headers'),
  statusCode?: int32(name='statusCode'),
  body?: DescribeImagePriceResponseBody(name='body'),
}

/**
 * @summary Queries the price of an Alibaba Cloud Marketplace image.
 *
 * @param request DescribeImagePriceRequest
 * @param runtime runtime options for this request RuntimeOptions
 * @return DescribeImagePriceResponse
 */
async function describeImagePriceWithOptions(request: DescribeImagePriceRequest, runtime: $RuntimeOptions): DescribeImagePriceResponse {
  request.validate();
  var query = OpenApiUtil.query(request.toMap());
  var req = new OpenApiUtil.OpenApiRequest{ 
    query = OpenApiUtil.query(query),
  };
  var params = new OpenApiUtil.Params{
    action = 'DescribeImagePrice',
    version = '2018-04-12',
    protocol = 'HTTPS',
    pathname = '/',
    method = 'GET',
    authType = 'AK',
    style = 'RPC',
    reqBodyType = 'formData',
    bodyType = 'json',
  };
  return callApi(params, req, runtime);
}

/**
 * @summary Queries the price of an Alibaba Cloud Marketplace image.
 *
 * @param request DescribeImagePriceRequest
 * @return DescribeImagePriceResponse
 */
async function describeImagePrice(request: DescribeImagePriceRequest): DescribeImagePriceResponse {
  var runtime = new $RuntimeOptions{};
  return describeImagePriceWithOptions(request, runtime);
}

model DescribeJobRequest {
  async?: boolean(name='Async', description='Specifies whether to use an asynchronous link to stop the job.

Default value: false.', example='false'),
  clusterId?: string(name='ClusterId', description='The ID of the E-HPC cluster.

You can call the [ListClusters](https://help.aliyun.com/document_detail/87116.html) operation to obtain the cluster ID.

This parameter is required.', example='ehpc-hz-jeJki6****'),
  jobId?: string(name='JobId', description='The job ID.

You can call the [ListJobs](https://help.aliyun.com/document_detail/87251.html) operation to obtain the job ID.

This parameter is required.', example='1.scheduler****'),
}

model DescribeJobResponseBody = {
  message?: {
    jobInfo?: string(name='JobInfo', description='The details of the job.', example='{"2.scheduler": {"egroup": "users","Stageout_status": 1,"Keep_Files": "n","server": "scheduler","queue": "workq"}}'),
  }(name='Message', description='The list of returned job information.'),
  requestId?: string(name='RequestId', description='The request ID.', example='9697AD8D-56FA-4C8E-B46C-00AC9***'),
}

model DescribeJobResponse = {
  headers?: map[string]string(name='headers'),
  statusCode?: int32(name='statusCode'),
  body?: DescribeJobResponseBody(name='body'),
}

/**
 * @summary Queries the information about a job in an E-HPC cluster.
 *
 * @param request DescribeJobRequest
 * @param runtime runtime options for this request RuntimeOptions
 * @return DescribeJobResponse
 */
async function describeJobWithOptions(request: DescribeJobRequest, runtime: $RuntimeOptions): DescribeJobResponse {
  request.validate();
  var query = OpenApiUtil.query(request.toMap());
  var req = new OpenApiUtil.OpenApiRequest{ 
    query = OpenApiUtil.query(query),
  };
  var params = new OpenApiUtil.Params{
    action = 'DescribeJob',
    version = '2018-04-12',
    protocol = 'HTTPS',
    pathname = '/',
    method = 'GET',
    authType = 'AK',
    style = 'RPC',
    reqBodyType = 'formData',
    bodyType = 'json',
  };
  return callApi(params, req, runtime);
}

/**
 * @summary Queries the information about a job in an E-HPC cluster.
 *
 * @param request DescribeJobRequest
 * @return DescribeJobResponse
 */
async function describeJob(request: DescribeJobRequest): DescribeJobResponse {
  var runtime = new $RuntimeOptions{};
  return describeJobWithOptions(request, runtime);
}

model DescribePriceRequest {
  chargeType?: string(name='ChargeType', description='The billing method of the ECS instances. Valid values:

*   PostPaid: pay-as-you-go
*   PrePaid: subscription

Default value: PostPaid.', example='PostPaid'),
  commodities?: [ 
    {
      amount?: int32(name='Amount', description='The node quantity of the type. Valid values: 1 to 1000.

Default value: 1.

Valid values of N: 1 to 10

This parameter is required.', example='2'),
      dataDisks?: [ 
        {
          category?: string(name='category', description='The type of the data disk. Valid values:

*   cloud_efficiency: ultra disk
*   cloud_ssd: standard SSD
*   cloud_essd: ESSD
*   cloud: basic disk

Default value: cloud_efficiency.

Valid values of N: 0 to 4.', example='cloud_efficiency'),
          deleteWithInstance?: boolean(name='deleteWithInstance', description='Specifies whether the data disk is released when the node is released. Valid values:

*   true
*   false

Default value: true.

Valid values of N: 0 to 4.', example='true'),
          encrypted?: boolean(name='encrypted', description='Specifies whether to encrypt the data disk. Valid values:

*   true: encrypts the data disk.
*   false: does not encrypt the data disk.

Default value: false.

Valid values of N: 0 to 4.', example='false'),
          performanceLevel?: string(name='performanceLevel', description='The performance level of the ESSD used as the data disk. This parameter takes effect only when the Commodities.N.DataDisks.N.category parameter is set to cloud_essd. Valid values:

*   PL0: A single ESSD can deliver up to 10,000 random read/write IOPS.
*   PL1: A single ESSD can deliver up to 50,000 IOPS of random read/write.
*   PL2: A single ESSD can deliver up to 100,000 random read/write IOPS.
*   PL3: A single ESSD can deliver up to 1,000,000 random read/write IOPS.

Default value: PL1.

Valid values of N: 0 to 4.', example='PL1'),
          size?: int32(name='size', description='The size of the data disk. Unit: GB.

Valid values: 40 to 500.

Default value: 40.

Valid values of N: 0 to 4.', example='40'),
        }
      ](name='DataDisks', description='The list of data disks.'),
      instanceType?: string(name='InstanceType', description='The instance type of the node.

Valid values of N: 1 to 10.

This parameter is required.', example='ecs.n1.tiny'),
      internetChargeType?: string(name='InternetChargeType', description='The EIP billing method of the node. Valid values:

*   PayByBandwidth: pay-by-bandwidth
*   PayByTraffic: pay-by-traffic

Valid values of N: 1 to 10.', example='PayByBandwidth'),
      internetMaxBandWidthOut?: int32(name='InternetMaxBandWidthOut', description='The maximum outbound public bandwidth of the node. Unit: Mbit/s.

Valid values: 0 to 100.

Default value: 0.

Valid values of N: 1 to 10.', example='100'),
      networkType?: string(name='NetworkType', description='The network type of the node. Valid value: VPC.

Valid values of N: 1 to 10.', example='VPC'),
      nodeType?: string(name='NodeType', description='The type of the node. Valid values:

*   Compute: compute node
*   Manager: management node
*   Login: logon node

Valid values of N: 1 to 10.

This parameter is required.', example='Compute'),
      period?: int32(name='Period', description='The subscription duration of the node. Valid values:

*   If PriceUnit is set to Year, the valid values of the Period parameter are 1, 2, and 3.
*   If PriceUnit is set to Month, the valid values of the Period parameter are 1, 2, 3, 4, 5, 6, 7, 8, and 9.
*   If PriceUnit is set to Hour, the valid value of the Period parameter is 1.

Default value: 1.

Valid values of N: 1 to 10.

This parameter is required.', example='1'),
      systemDiskCategory?: string(name='SystemDiskCategory', description='The system disk type of the node. Valid values:

*   cloud_efficiency: ultra disk
*   cloud_ssd: standard SSD
*   cloud_essd: ESSD
*   cloud: basic disk

Default value: cloud_efficiency

Valid values of N: 1 to 10.', example='cloud_ssd'),
      systemDiskPerformanceLevel?: string(name='SystemDiskPerformanceLevel', description='The performance level of the ESSD used as the system disk. This parameter takes effect only when the Commodities.N.SystemDiskCategory parameter is set to cloud_essd. Valid values:

*   PL0: A single ESSD can deliver up to 10,000 random read/write IOPS.
*   PL1: A single ESSD can deliver up to 50,000 IOPS of random read/write.
*   PL2: A single ESSD can deliver up to 100,000 random read/write IOPS.
*   PL3: A single ESSD can deliver up to 1,000,000 random read/write IOPS.

Default value: PL1.

Valid values of N: 1 to 10', example='PL1'),
      systemDiskSize?: int32(name='SystemDiskSize', description='The system disk size of the node. Unit: GB.

Valid values: 40 to 500.

Default value: 40.

Valid values of N: 1 to 10.', example='40'),
    }
  ](name='Commodities', description='The information about the service.

This parameter is required.'),
  orderType?: string(name='OrderType', description='The type of the order. The order can be set only as a purchase order. Valid value: INSTANCE-BUY.', example='INSTANCE-BUY'),
  priceUnit?: string(name='PriceUnit', description='The billing cycle of the Elastic Compute Service (ECS) instances. This parameter takes effect only when the ChargeType parameter is set to PrePaid. Valid values:

*   Month: pay-by-month
*   Year: pay-by-year
*   Hour: pay-by-hour

Default value: Hour.

This parameter is required.', example='Hour'),
}

model DescribePriceResponseBody = {
  prices?: {
    priceInfo?: [ 
    {
      currency?: string(name='Currency', description='The currency that is used to measure the price. Valid values:

USD', example='USD'),
      nodeType?: string(name='NodeType', description='The node type. Valid values:

*   Manager: management node
*   Login: logon node
*   Compute: compute node', example='Compute'),
      originalPrice?: float(name='OriginalPrice', description='The original price.

Unit: USD.', example='1258'),
      tradePrice?: float(name='TradePrice', description='The final price.

Unit: USD.', example='1258'),
    }
  ](name='PriceInfo')
  }(name='Prices', description='The array of cluster prices. If you query the prices of multiple nodes in the cluster, the sequence of the prices in the returned value of PriceInfo is the same as the sequence of the nodes in the request parameters. For example, the first price in the value of PriceInfo is the price of the first node specified in the request parameters.'),
  requestId?: string(name='RequestId', description='The request ID.', example='54FF9025-2C2F-42EB-870D-0DF5B0ACF24E'),
  totalTradePrice?: float(name='TotalTradePrice', description='The total price.

Unit: USD.', example='1258'),
}

model DescribePriceResponse = {
  headers?: map[string]string(name='headers'),
  statusCode?: int32(name='statusCode'),
  body?: DescribePriceResponseBody(name='body'),
}

/**
 * @summary Queries the pricing information of a cluster.
 *
 * @param request DescribePriceRequest
 * @param runtime runtime options for this request RuntimeOptions
 * @return DescribePriceResponse
 */
async function describePriceWithOptions(request: DescribePriceRequest, runtime: $RuntimeOptions): DescribePriceResponse {
  request.validate();
  var query = OpenApiUtil.query(request.toMap());
  var req = new OpenApiUtil.OpenApiRequest{ 
    query = OpenApiUtil.query(query),
  };
  var params = new OpenApiUtil.Params{
    action = 'DescribePrice',
    version = '2018-04-12',
    protocol = 'HTTPS',
    pathname = '/',
    method = 'GET',
    authType = 'AK',
    style = 'RPC',
    reqBodyType = 'formData',
    bodyType = 'json',
  };
  return callApi(params, req, runtime);
}

/**
 * @summary Queries the pricing information of a cluster.
 *
 * @param request DescribePriceRequest
 * @return DescribePriceResponse
 */
async function describePrice(request: DescribePriceRequest): DescribePriceResponse {
  var runtime = new $RuntimeOptions{};
  return describePriceWithOptions(request, runtime);
}

model DescribeServerlessJobsRequest {
  clusterId?: string(name='ClusterId', description='The ID of the E-HPC cluster.

You can call the [ListClusters](https://help.aliyun.com/document_detail/87116.html) operation to query the cluster ID.

This parameter is required.', example='ehpc-hz-FYUr32****'),
  jobIds?: [ string ](name='JobIds', description='The list of serverless job IDs or the subtask IDs (array jobs).

> 

*   If the serverless job is an array job, you can specify only the subtask ID. Specify the subtask ID in the format of \\\\<array job ID>_< subtask index>. For example, 10_3 indicates the subtask whose index is 3 in the array job whose ID is 10.

*   You can specify only a single ID in one request.

This parameter is required.'),
}

model DescribeServerlessJobsResponseBody = {
  jobInfos?: [ 
    {
      arrayProperties?: {
        indexEnd?: long(name='IndexEnd', description='The end value of the array job index.', example='5'),
        indexStart?: long(name='IndexStart', description='The starting value of the array job index.', example='1'),
        indexStep?: long(name='IndexStep', description='The interval of the array job index.', example='2'),
      }(name='ArrayProperties', description='The properties of the array job.'),
      containerGroups?: [ 
        {
          containerGroupId?: string(name='ContainerGroupId', description='The ID of the container group.', example='eci-bp1jrgfqqy54kg5hc****'),
          containerGroupName?: string(name='ContainerGroupName', description='The name of the container group.', example='test'),
          containers?: [ 
            {
              args?: [ string ](name='Args', description='The startup parameter of the container.'),
              commands?: [ string ](name='Commands', description='The startup command of the container.'),
              cpu?: float(name='Cpu', description='The number of vCPUs.', example='2.0'),
              currentState?: {
                detailStatus?: string(name='DetailStatus', description='The details of the container status.', example='working'),
                exitCode?: long(name='ExitCode', description='The exit code of the container.', example='0'),
                finishTime?: string(name='FinishTime', description='The time when the container stopped running.', example='2018-08-02T15:00:00Z'),
                message?: string(name='Message', description='The information about the container status.', example='Back-off 5m0s restarting failed container=test pod=test_eci-xxx(xxx)'),
                reason?: string(name='Reason', description='The reason why the container is in this state.', example='Started'),
                signal?: long(name='Signal', description='The code of the container status.', example='1'),
                startTime?: string(name='StartTime', description='The time when the container started to run.', example='2019-12-19T12:05:02Z'),
                state?: string(name='State', description='The status of the job. Valid values:

*   Waiting
*   Running
*   Terminated', example='Terminated'),
              }(name='CurrentState', description='The current status of the container.'),
              environmentVars?: [ 
                {
                  key?: string(name='Key', description='The name of the environment variable.', example='PATH'),
                  value?: string(name='Value', description='The value of the environment variable.', example='/usr/bin/'),
                  valueFrom?: {
                    fieldRef?: {
                      fieldPath?: string(name='FieldPath', description='The path of the field.', example='status.podIP'),
                    }(name='FieldRef', description='The specified field.'),
                  }(name='ValueFrom', description='The source of the environment variable value. This parameter can be used only when the variable value is not specified.'),
                }
              ](name='EnvironmentVars', description='The environment variables.'),
              gpu?: int32(name='Gpu', description='The number of GPUs.', example='1'),
              image?: string(name='Image', description='The image of the container.', example='HPL'),
              imagePullPolicy?: string(name='ImagePullPolicy', description='The policy to pull images. Valid values:

*   Always: Each time instances are created, image pulling is performed.
*   IfNotPresent: On-premises images are preferentially used. If no on-premises images are available, image pulling is performed.
*   Never: On-premises images are always used. Image pulling is not performed.', example='Always'),
              livenessProbe?: {
                execs?: [ string ](name='Execs', description='The commands that are run.'),
                failureThreshold?: long(name='FailureThreshold', description='The minimum number of consecutive failures that must occur for the probe to be considered as failed. Default value: 3.', example='3'),
                httpGet?: {
                  path?: string(name='Path', description='The path to which HTTP GET requests are sent.', example='/usr/nginx/'),
                  port?: long(name='Port', description='The port to which HTTP GET requests are sent.', example='80'),
                  scheme?: string(name='Scheme', description='The protocol type of the HTTP GET requests.', example='HTTP'),
                }(name='HttpGet', description='The HTTP GET method that is used to check the container.'),
                initialDelaySeconds?: long(name='InitialDelaySeconds', description='The number of seconds after the container is started and before a liveness probe is initiated.', example='10'),
                periodSeconds?: long(name='PeriodSeconds', description='The interval at which the probe is run. Unit: seconds. Default value: 10. Minimum value: 1.', example='5'),
                successThreshold?: long(name='SuccessThreshold', description='The minimum number of consecutive successes that must occur for the check to be considered successful. Default value: 1. Set the value to 1.', example='1'),
                tcpSocket?: {
                  host?: string(name='Host', description='The name of the host.', example='1.2.3.4'),
                  port?: long(name='Port', description='The port number.', example='80'),
                }(name='TcpSocket', description='The TCP socket method that is used to check the container.'),
                timeoutSeconds?: long(name='TimeoutSeconds', description='The timeout period of the check. Default value: 1. Minimum value: 1.', example='10'),
              }(name='LivenessProbe', description='The liveness probe of the container.'),
              memory?: float(name='Memory', description='The memory size of the instance. Unit: GiB.', example='4.0'),
              name?: string(name='Name', description='The container name.', example='HPL'),
              ports?: [ 
                {
                  port?: long(name='Port', description='The port number. Valid values: 1 to 65535.', example='8080'),
                  protocol?: string(name='Protocol', description='The protocol.', example='TCP'),
                }
              ](name='Ports', description='The exposed ports and protocols of the container.'),
              previousState?: {
                detailStatus?: string(name='DetailStatus', description='The details of the container status.', example='working'),
                exitCode?: long(name='ExitCode', description='The exit code of the container.', example='0'),
                finishTime?: string(name='FinishTime', description='The time when the container stopped running.', example='2018-08-02T15:00:00Z'),
                message?: string(name='Message', description='The message about the container status.', example='Back-off 5m0s restarting failed container=test pod=test_eci-xxx(xxx)'),
                reason?: string(name='Reason', description='The reason why the container is in this state.', example='Completed'),
                signal?: long(name='Signal', description='The code of the container status.', example='1'),
                startTime?: string(name='StartTime', description='The time when the container started to run.', example='2018-08-02T15:00:00Z'),
                state?: string(name='State', description='The status of the container. Valid values:

*   Waiting: The container is being started.
*   Running: The container is running.
*   Terminated: The container terminates running.', example='Terminated'),
              }(name='PreviousState', description='The previous status of the container.'),
              readinessProbe?: {
                execs?: [ string ](name='Execs', description='The commands that are run in the container when you use the command line interface (CLI) to perform health checks.'),
                failureThreshold?: long(name='FailureThreshold', description='The minimum number of consecutive failures that must occur for the check to be considered as failed. Default value: 3.', example='3'),
                httpGet?: {
                  path?: string(name='Path', description='The path to which HTTP GET requests are sent.', example='/usr/local'),
                  port?: long(name='Port', description='The port to which the system sends an HTTP GET request for a health check.', example='8080'),
                  scheme?: string(name='Scheme', description='The protocol type of the HTTP GET requests.', example='HTTP'),
                }(name='HttpGet', description='The HTTP GET method that is used to check the container.'),
                initialDelaySeconds?: long(name='InitialDelaySeconds', description='The number of seconds after the container is started and before a liveness probe is initiated.', example='10'),
                periodSeconds?: long(name='PeriodSeconds', description='The interval at which the container is checked. Unit: seconds. Default value: 10. Minimum value: 1.', example='5'),
                successThreshold?: long(name='SuccessThreshold', description='The minimum number of consecutive successes for a failed liveness probe to be considered successful. Default value: 1. Set the value to 1.', example='1'),
                tcpSocket?: {
                  host?: string(name='Host', description='The IP address of the host.', example='1.2.3.4'),
                  port?: long(name='Port', description='The port number.', example='8888'),
                }(name='TcpSocket', description='The TCP socket method that is used to check the container.'),
                timeoutSeconds?: long(name='TimeoutSeconds', description='The timeout period of the check. Default value: 1. Minimum value: 1.', example='1'),
              }(name='ReadinessProbe', description='The readiness probe that is used to check whether the container is ready to serve a request.'),
              ready?: boolean(name='Ready', description='Indicates whether the container passed the readiness probe.', example='true'),
              restartCount?: int32(name='RestartCount', description='The number of times that the instance worker restarted.', example='5'),
              securityContext?: {
                capability?: {
                  adds?: [ string ](name='Adds', description='The permissions specific to the processes in the container.'),
                }(name='Capability', description='The permissions specific to the processes in the container.'),
                readOnlyRootFilesystem?: boolean(name='ReadOnlyRootFilesystem', description='Indicates whether the root file system is set to the read-only mode. The only valid value is true.', example='true'),
                runAsUser?: long(name='RunAsUser', description='The user ID (UID) that is used to run the entry point of the container process.', example='1558'),
              }(name='SecurityContext', description='The security context of the container.'),
              stdin?: boolean(name='Stdin', description='Indicates whether the container allocates buffer resources to standard input streams when the container runs. If you do not specify this parameter, an end-of-file (EOF) error may occur when standard input streams in the container are read. Default value: false.', example='true'),
              stdinOnce?: boolean(name='StdinOnce', description='Indicates whether the container runtime closes the stdin channel after the stdin channel has been opened by a single attach session. If stdin is true, the stdin stream remains open across multiple attach sessions. If StdinOnce is set to true, stdin is opened on container start, but remains empty until the first client attaches to stdin, and then remains open and receives data until the client disconnects. When the client disconnects, stdin is closed and remains closed until the container is restarted.', example='true'),
              tty?: boolean(name='Tty', description='Indicates whether interaction is enabled. Default value: false. If the value of the Command parameter is /bin/bash, the value of this parameter must be set to true.', example='false'),
              volumeMounts?: [ 
                {
                  mountPath?: string(name='MountPath', description='The directory to which the volume is mounted. Data under this directory is overwritten by the data on the volume.', example='/usr/share/'),
                  mountPropagation?: string(name='MountPropagation', description='The mount propagation settings of the volume. Mount propagation allows you to share volumes that are mounted on a container with other containers in the same pod or other pods on the same node. Valid values:

*   None: The volume mount does not receive subsequent mounts that are mounted to the volume or the subdirectories of the volume.
*   HostToCotainer: The volume mount receives all subsequent mounts that are mounted to the volume or the subdirectories of the volume.
*   Bidirectional: This value is similar to HostToCotainer. The volume mount receives all subsequent mounts that are mounted to the volume or the subdirectories of the volume. All volume mounts that are mounted by the container are propagated back to the instance and all containers of all pods that use the same volume.', example='None'),
                  name?: string(name='Name', description='The name of the volume.', example='test-empty'),
                  readOnly?: boolean(name='ReadOnly', description='Indicates whether the volumes are read-only.', example='false'),
                  subPath?: string(name='SubPath', description='The subdirectory of the volume. This parameter specifies different subdirectories of the same volume that the instance can mount to different subdirectories of containers.', example='/usr/sub'),
                }
              ](name='VolumeMounts', description='Information about the mounted volumes.'),
              workingDir?: string(name='WorkingDir', description='The working directory.', example='/usr/local/nginx'),
            }
          ](name='Containers', description='The list of containers in the container group.'),
          cpu?: float(name='Cpu', description='The number of vCPUs that are allocated to the container.', example='2'),
          creationTime?: string(name='CreationTime', description='The time when the instance is created. The time follows the RFC 3339 standard and must be in UTC.', example='2018-08-02T15:00:00Z'),
          discount?: long(name='Discount', description='The discount.', example='9'),
          dnsConfig?: {
            nameServers?: [ string ](name='NameServers', description='The IP addresses of DNS servers.'),
            options?: [ 
              {
                name?: string(name='Name', description='The variable name of the option.', example='name'),
                value?: string(name='Value', description='The variable value of the option.', example='value'),
              }
            ](name='Options', description='The options. Each option is a name-value pair. The value in the name-value pair is optional.'),
            searches?: [ string ](name='Searches', description='The search domains of the DNS server.'),
          }(name='DnsConfig', description='The Domain Name System (DNS) settings.'),
          eciSecurityContext?: {
            sysctls?: [ 
              {
                name?: string(name='Name', description='The name of the Sysctl parameter.', example='kernel.msgmax'),
                value?: string(name='Value', description='The value of the Sysctl parameter.', example='65536'),
              }
            ](name='Sysctls', description='The Sysctl parameters.'),
          }(name='EciSecurityContext', description='The security context of the container group.'),
          eniInstanceId?: string(name='EniInstanceId', description='The ID of the elastic network interface (ENI).', example='eni-bp14rzqi6fd8satm****'),
          ephemeralStorage?: long(name='EphemeralStorage', description='The size of the temporary storage space. Unit: GiB.', example='20'),
          events?: [ 
            {
              count?: int32(name='Count', description='The number of the events.', example='20'),
              firstTimestamp?: string(name='FirstTimestamp', description='The time when the event started.', example='2018-08-02T15:00:00Z'),
              lastTimestamp?: string(name='LastTimestamp', description='The time when the event ended.', example='2018-08-02T15:00:00Z'),
              message?: string(name='Message', description='The message about the event.', example='Started container'),
              name?: string(name='Name', description='The name of the category to which the event belongs.', example='test-xxx'),
              reason?: string(name='Reason', description='The name of the event.', example='Created'),
              type?: string(name='Type', description='The type of the event. Valid values:

*   Normal
*   Warning', example='Normal'),
            }
          ](name='Events', description='The event information. Up to 50 events can be returned.'),
          expiredTime?: string(name='ExpiredTime', description='The time when the instance failed to run due to overdue payments. The time follows the RFC 3339 standard and must be in UTC.', example='2018-08-02T15:00:00Z'),
          failedTime?: string(name='FailedTime', description='The time when the instance failed to run. The time follows the RFC 3339 standard and must be in UTC.', example='2018-08-02T15:00:00Z'),
          hostAliases?: [ 
            {
              hostnames?: [ string ](name='Hostnames', description='The information about the host.'),
              ip?: string(name='Ip', description='The IP address.', example='192.0.XX.XX'),
            }
          ](name='HostAliases', description='The hostname mapping of a container in the elastic container instance.'),
          initContainers?: [ 
            {
              args?: [ string ](name='Args', description='The startup parameters.'),
              command?: [ string ](name='Command', description='The startup command.'),
              cpu?: long(name='Cpu', description='The number of vCPUs.', example='1.0'),
              currentState?: {
                detailStatus?: string(name='DetailStatus', description='The details of the container status.', example='working'),
                exitCode?: long(name='ExitCode', description='The exit code of the container.', example='0'),
                finishTime?: string(name='FinishTime', description='The time when the container stopped running.', example='2018-08-02T15:00:00Z'),
                message?: string(name='Message', description='The message about the event.', example='Created container'),
                reason?: string(name='Reason', description='The reason why the container is in this state.', example='Started'),
                signal?: long(name='Signal', description='The code of the container status.', example='1'),
                startTime?: string(name='StartTime', description='The time when the container started to run.', example='2018-08-02T15:00:00Z'),
                state?: string(name='State', description='The status of the container. Valid values:

*   Waiting
*   Running
*   Terminated', example='Running'),
              }(name='CurrentState', description='The current status of the container.'),
              environmentVars?: [ 
                {
                  key?: string(name='Key', description='The name of the environment variable.', example='PATH'),
                  value?: string(name='Value', description='The value of the environment variable.', example='/usr/local/bin'),
                  valueFrom?: {
                    fieldRef?: {
                      fieldPath?: string(name='FieldPath', description='The path of the field in the specified version. Set the value to `status.podIP`.', example='status.podIP'),
                    }(name='FieldRef', description='The specified field.'),
                  }(name='ValueFrom', description='The source of the environment variable value. This parameter can be used only when the variable value is not specified.'),
                }
              ](name='EnvironmentVars', description='The environment variables.'),
              gpu?: long(name='Gpu', description='The number of GPUs.', example='1'),
              image?: string(name='Image', description='The image.', example='nginx'),
              imagePullPolicy?: string(name='ImagePullPolicy', description='The policy to pull images.', example='Always'),
              memory?: long(name='Memory', description='The size of memory that is allocated to the init container. Unit: GiB.', example='2.0'),
              name?: string(name='Name', description='The container name.', example='Init-xxx'),
              ports?: [ 
                {
                  port?: long(name='Port', description='The port number. Valid values: 1 to 65535.', example='8888'),
                  protocol?: string(name='Protocol', description='The protocol.', example='TCP'),
                }
              ](name='Ports', description='The exposed ports and protocols of the container.'),
              previousState?: {
                detailStatus?: string(name='DetailStatus', description='The details of the container status.', example='working'),
                exitCode?: long(name='ExitCode', description='The exit code of the container.', example='0'),
                finishTime?: string(name='FinishTime', description='The time when the container stopped running.', example='2019-12-24T05:35:44Z'),
                message?: string(name='Message', description='The message about the container status.', example='Started container'),
                reason?: string(name='Reason', description='The reason why the container is in this state.', example='completed'),
                signal?: long(name='Signal', description='The code of the container status.', example='1'),
                startTime?: string(name='StartTime', description='The time when the container started to run.', example='2019-12-24T05:35:44Z'),
                state?: string(name='State', description='The status of the container. Valid values: Waiting, Running, and Terminated.', example='Terminated'),
              }(name='PreviousState', description='The previous status of the container.'),
              ready?: boolean(name='Ready', description='Indicates whether the container passed the readiness probe.', example='true'),
              restartCount?: long(name='RestartCount', description='The number of times that the instance worker restarted.', example='5'),
              securityContext?: {
                capability?: {
                  adds?: [ string ](name='Adds', description='The permissions specific to the processes in the container.'),
                }(name='Capability', description='The permissions specific to the processes in the container.'),
                readOnlyRootFilesystem?: boolean(name='ReadOnlyRootFilesystem', description='Indicates whether the root file system is set to the read-only mode. The only valid value is true.', example='true'),
                runAsUser?: long(name='RunAsUser', description='The UID that is used to run the entry point of the container process.', example='1557'),
              }(name='SecurityContext', description='The security context of the container.'),
              volumeMounts?: [ 
                {
                  mountPath?: string(name='MountPath', description='The directory to which the volume is mounted. Data under this directory is overwritten by the data on the volume.', example='/usr/share/'),
                  mountPropagation?: string(name='MountPropagation', description='The mount propagation settings of the volume. Mount propagation allows you to share volumes that are mounted on a container with other containers in the same pod or other pods on the same node. Valid values:

*   None: The volume mount does not receive subsequent mounts that are mounted to the volume or the subdirectories of the volume.
*   HostToCotainer: The volume mount receives all subsequent mounts that are mounted to the volume or the subdirectories of the volume.
*   Bidirectional: This value is similar to HostToCotainer. The volume mount receives all subsequent mounts that are mounted to the volume or the subdirectories of the volume. All volume mounts that are mounted by the container are propagated back to the instance and all containers of all pods that use the same volume.

Default value: None.', example='None'),
                  name?: string(name='Name', description='The name of the volume. The name is the same as the volume you selected when you purchased the container.', example='test-empty'),
                  readOnly?: boolean(name='ReadOnly', description='Default value: False.', example='false'),
                }
              ](name='VolumeMounts', description='The information about the volumes that are mounted to the init container.'),
              workingDir?: string(name='WorkingDir', description='The working directory.', example='/usr/test'),
            }
          ](name='InitContainers', description='The init containers.'),
          instanceType?: string(name='InstanceType', description='The instance type of the Elastic Compute Service (ECS) instance.', example='ecs.g5.large'),
          internetIp?: string(name='InternetIp', description='The public IP address.', example='192.0.XX.XX'),
          intranetIp?: string(name='IntranetIp', description='The private IP address.', example='172.16.XX.XX'),
          ipv6Address?: string(name='Ipv6Address', description='The IPv6 address.', example='2001:XXXX:4:4:4:4:4:4'),
          memory?: float(name='Memory', description='The memory size of the elastic container instance. Unit: GiB.', example='4.0'),
          ramRoleName?: string(name='RamRoleName', description='The name of the instance RAM role. You can use an instance RAM role to access both elastic container instances and ECS instances. For more information, see [Use the instance RAM role by calling APIs](https://help.aliyun.com/document_detail/61178.html).', example='ram:PassRole'),
          regionId?: string(name='RegionId', description='The ID of the region in which the instance resides.', example='cn-hangzhou'),
          resourceGroupId?: string(name='ResourceGroupId', description='The ID of the resource group to which the cluster belongs. If you do not specify a resource group when you create an elastic container instance, the system automatically adds the instance to the default resource group in your account.', example='rg-aekzh43v*****'),
          restartPolicy?: string(name='RestartPolicy', description='The instance restart policy. Valid values:

*   Always: Always restarts the instance if a container in the instance exits upon termination.
*   Never: Never restarts the instance if a container in the instance exits upon termination.
*   OnFailure: Restarts the instance when the last start failed.', example='Never'),
          securityGroupId?: string(name='SecurityGroupId', description='The ID of the security group.', example='sg-bp12ujq5zpxuyjfo3o8r'),
          spotPriceLimit?: float(name='SpotPriceLimit', description='The maximum hourly price for the preemptible instance.

This parameter is returned only if you set the SpotStrategy parameter to SpotWithPriceLimit.', example='0.025'),
          spotStrategy?: string(name='SpotStrategy', description='The bidding policy of the instance. Valid values:

*   NoSpot: The instance is a regular pay-as-you-go instance.
*   SpotWithPriceLimit: The instance is a preemptible instance that has a user-defined maximum hourly price.
*   SpotAsPriceGo: The instance is a preemptible instance for which the market price at the time of purchase is automatically used as the bidding price.', example='NoSpot'),
          status?: string(name='Status', description='The status of the instance. Valid values:

*   Pending: The instance is being started.
*   Running: The instance is running.
*   Succeeded: The instance runs successfully.
*   Failed: The instance fails to run.
*   Scheduling: The instance is being created.
*   ScheduleFailed: The instance fails to be created.
*   Restarting: The instance is being restarted.
*   Updating: The instance is being updated.
*   Terminating: The instance is being terminated.
*   Expired: The instance expires.', example='Running'),
          succeededTime?: string(name='SucceededTime', description='The time when all containers exited on success. The time follows the RFC 3339 standard and must be in UTC.', example='2019-12-11T04:33:42Z'),
          tags?: [ 
            {
              key?: string(name='Key', description='The tag key.', example='name'),
              value?: string(name='Value', description='The tag value.', example='test-xh'),
            }
          ](name='Tags', description='The tags of the instances.'),
          tenantEniInstanceId?: string(name='TenantEniInstanceId', description='This parameter is unavailable.', example='i-xxx'),
          tenantEniIp?: string(name='TenantEniIp', description='This parameter is unavailable.', example='10.10.XX.XX'),
          tenantSecurityGroupId?: string(name='TenantSecurityGroupId', description='This parameter is unavailable.', example='sg-xxx'),
          tenantVSwitchId?: string(name='TenantVSwitchId', description='This parameter is unavailable.', example='vsw-xxx'),
          vSwitchId?: string(name='VSwitchId', description='The vSwitch ID.', example='vsw-bp1vzjjflab6wvjox****'),
          volumes?: [ 
            {
              configFileVolumeConfigFileToPaths?: [ 
                {
                  content?: string(name='Content', description='The content of the configuration file. Maximum size: 32 KB.', example='hello world'),
                  path?: string(name='Path', description='The relative path to the configuration file.', example='/usr/bin/'),
                }
              ](name='ConfigFileVolumeConfigFileToPaths', description='The paths to configuration files.'),
              diskVolumeDiskId?: string(name='DiskVolumeDiskId', description='The ID of the disk volume if you set Type to DiskVolume.', example='d-xxxx'),
              diskVolumeFsType?: string(name='DiskVolumeFsType', description='The type of the volume.', example='xfs'),
              emptyDirVolumeMedium?: string(name='EmptyDirVolumeMedium', description='The storage media for the emptyDir volume. This parameter is empty by default, which indicates that the node file system is used as the storage media. Valid values:

*   Memory: uses memory as the storage media.
*   LocalRaid0: forms local disks into RAID 0. This value is valid only if an elastic container instance that has local disks mounted is created. For more information, see [Create an elastic container instance that has local disks mounted](https://help.aliyun.com/document_detail/114664.html).', example='Memory'),
              emptyDirVolumeSizeLimit?: string(name='EmptyDirVolumeSizeLimit', description='The storage size of the emptyDir volume. If you specify this parameter, include the unit in the value. We recommend that you use Gi or Mi.', example='256Mi'),
              flexVolumeDriver?: string(name='FlexVolumeDriver', description='The name of the driver when you set the Type parameter to FlexVolume.', example='flexvolume'),
              flexVolumeFsType?: string(name='FlexVolumeFsType', description='The file system type when you set the Type parameter to FlexVolume. The default value is determined by the script of the FlexVolume plug-in.', example='ntfs'),
              flexVolumeOptions?: string(name='FlexVolumeOptions', description='The FlexVolume options.', example='[nolock,tcp,noresvport]'),
              NFSVolumePath?: string(name='NFSVolumePath', description='The path of the Network File System (NFS) volume.', example='/eci'),
              NFSVolumeReadOnly?: boolean(name='NFSVolumeReadOnly', description='Indicates whether the NFS volume is read-only.', example='false'),
              NFSVolumeServer?: string(name='NFSVolumeServer', description='The endpoint of the server if you set Type to NFSVolume.', example='0eafxxxxx-xxxxx.cn-hangzhou.nas.aliyuncs.com'),
              name?: string(name='Name', description='The name of the volume.', example='test-empty'),
              type?: string(name='Type', description='The type of the volume. Valid values:

*   EmptyDirVolume
*   NFSVolume
*   ConfigFileVolume
*   FlexVolume', example='EmptyDirVolume'),
            }
          ](name='Volumes', description='The information about volumes.'),
          vpcId?: string(name='VpcId', description='The ID of the virtual private cloud (VPC) to which the elastic container instance belongs.', example='vpc-1vzjjflab6wvjox****'),
          zoneId?: string(name='ZoneId', description='The ID of the zone in which the elastic container instance is deployed.', example='cn-hangzhou-h'),
        }
      ](name='ContainerGroups', description='The information of the container groups that are used to run the serverless job.'),
      endTime?: long(name='EndTime', description='The time when the serverless job ended.', example='1662016121'),
      isArrayJob?: boolean(name='IsArrayJob', description='Indicates whether the job is an array job.', example='false'),
      jobId?: string(name='JobId', description='The ID of the serverless job or the subtask (array job).', example='5'),
      jobName?: string(name='JobName', description='The name of the serverless job.', example='testjob'),
      lastModifyTime?: long(name='LastModifyTime', description='The time when the serverless job is last modified.', example='1663831441000'),
      priority?: long(name='Priority', description='The scheduling priority of the serverless job.', example='9'),
      queue?: string(name='Queue', description='The name of the queue in which the serverless job is run.', example='comp'),
      startTime?: long(name='StartTime', description='The time when the serverless job started.', example='1647427667'),
      state?: string(name='State', description='The status of the serverless job. Valid values:

*   Pending
*   Initing
*   Running
*   Succeeded
*   Canceled
*   Failed', example='Running'),
      submitTime?: long(name='SubmitTime', description='The time when the serverless job is submitted.', example='1647423718'),
      user?: string(name='User', description='The username that is used to run the serverless job.', example='testuser'),
    }
  ](name='JobInfos', description='The list of detailed information about the serverless job.'),
  requestId?: string(name='RequestId', description='The request ID.', example='04F0F334-1335-436C-A1D7-6C044FE73368'),
  totalCount?: int32(name='TotalCount', description='The total number of entries returned.', example='1'),
}

model DescribeServerlessJobsResponse = {
  headers?: map[string]string(name='headers'),
  statusCode?: int32(name='statusCode'),
  body?: DescribeServerlessJobsResponseBody(name='body'),
}

/**
 * @summary Queries the details of a serverless job by job ID or subtask ID (array job). You can specify only a single job ID or a single subtask ID at a time.
 *
 * @param request DescribeServerlessJobsRequest
 * @param runtime runtime options for this request RuntimeOptions
 * @return DescribeServerlessJobsResponse
 */
async function describeServerlessJobsWithOptions(request: DescribeServerlessJobsRequest, runtime: $RuntimeOptions): DescribeServerlessJobsResponse {
  request.validate();
  var query = {};
  if (!$isNull(request.clusterId)) {
    query['ClusterId'] = request.clusterId;
  }
  if (!$isNull(request.jobIds)) {
    query['JobIds'] = request.jobIds;
  }
  var req = new OpenApiUtil.OpenApiRequest{ 
    query = OpenApiUtil.query(query),
  };
  var params = new OpenApiUtil.Params{
    action = 'DescribeServerlessJobs',
    version = '2018-04-12',
    protocol = 'HTTPS',
    pathname = '/',
    method = 'POST',
    authType = 'AK',
    style = 'RPC',
    reqBodyType = 'formData',
    bodyType = 'json',
  };
  return callApi(params, req, runtime);
}

/**
 * @summary Queries the details of a serverless job by job ID or subtask ID (array job). You can specify only a single job ID or a single subtask ID at a time.
 *
 * @param request DescribeServerlessJobsRequest
 * @return DescribeServerlessJobsResponse
 */
async function describeServerlessJobs(request: DescribeServerlessJobsRequest): DescribeServerlessJobsResponse {
  var runtime = new $RuntimeOptions{};
  return describeServerlessJobsWithOptions(request, runtime);
}

model EditJobTemplateRequest {
  arrayRequest?: string(name='ArrayRequest', description='The job array.

Format: X-Y:Z. X is the minimum index value. Y is the maximum index value. Z is the step size. For example, 2-7:2 indicates that three jobs need to be run and their index values are 2, 4, and 6.', example='1-10:2'),
  clockTime?: string(name='ClockTime', description='The maximum running time of the job. Valid formats:

*   hh:mm:ss
*   mm:ss
*   ss

We recommend that you use the hh:mm:ss format. If the maximum running time is 12 hours, set the value to 12:00:00.', example='12:00:00'),
  commandLine?: string(name='CommandLine', description='The command that is used to run the job.

This parameter is required.', example='./LammpsTest/lammps.pbs'),
  gpu?: int32(name='Gpu', description='The maximum GPU usage required by a single compute node. Valid values: 1 to 8.

The parameter takes effect only when the cluster uses PBS and a compute node is a GPU-accelerated instance.', example='1'),
  inputFileUrl?: string(name='InputFileUrl', description='The URL of the job files that are uploaded to an Object Storage Service (OSS) bucket.', example='https://test.oss-cn-beijing.aliyuncs.com/test.py'),
  mem?: string(name='Mem', description='The maximum memory usage required by a single compute node. Unit: GB, MB, or KB. The unit is case-insensitive.', example='1GB'),
  name?: string(name='Name', description='The name of the job template.

You can call the [ListJobTemplates](https://help.aliyun.com/document_detail/87248.html) operation to obtain the job template name.

This parameter is required.', example='jobTemapleteName'),
  node?: int32(name='Node', description='The number of the compute nodes. Valid values: 1 to 500.

>  If the parameter is not specified, the Task, Thread, Mem, and Gpu parameters become invalid.', example='2'),
  packagePath?: string(name='PackagePath', description='The path that is used to run the job.', example='./packageFolder'),
  priority?: int32(name='Priority', description='The priority of the job. Valid values: 0 to 9. A large value indicates a high priority.

Default value: 0', example='0'),
  queue?: string(name='Queue', description='The name of the queue.', example='workq'),
  reRunable?: boolean(name='ReRunable', description='Specifies whether the job can be rerun. Valid values:

*   true: The job can be rerun.
*   false: The job cannot be rerun.', example='false'),
  runasUser?: string(name='RunasUser', description='The name of the user that runs the job.

You can call the [ListUsers](https://help.aliyun.com/document_detail/188572.html) operation to query the users of the cluster.', example='user'),
  stderrRedirectPath?: string(name='StderrRedirectPath', description='The output file path of stderr.', example='./Lammps'),
  stdoutRedirectPath?: string(name='StdoutRedirectPath', description='The output file path of stdout.', example='./LammpsTest'),
  task?: int32(name='Task', description='The number of tasks required by a single compute node. Valid values: 1 to 1000.', example='2'),
  templateId?: string(name='TemplateId', description='The ID of the job template.

You can call the [ListJobTemplates](https://help.aliyun.com/document_detail/87248.html) operation to obtain the job template ID.

This parameter is required.', example='ehpc-job-tmpl-6RxO5y****'),
  thread?: int32(name='Thread', description='The number of threads required by a single compute node. Valid values: 1 to 1000.', example='1'),
  unzipCmd?: string(name='UnzipCmd', description='The command that is used to decompress the job files downloaded from an OSS bucket. The parameter takes effect only when WithUnzipCmd is set to true. Valid values:

*   tar xzf: decompresses GZIP files.
*   tar xf: decompresses TAR files.
*   unzip: decompresses ZIP files.', example='tar xzf'),
  variables?: string(name='Variables', description='The runtime variables passed to the job. They can be accessed by using environment variables in the executable file.', example='[{Name:,Value:},{Name:,Value:}]'),
  withUnzipCmd?: boolean(name='WithUnzipCmd', description='Specifies whether to decompress the job files downloaded from an OSS bucket. Valid values:

*   true: The job files are decompressed.
*   false: The job files are not decompressed.', example='true'),
}

model EditJobTemplateResponseBody = {
  requestId?: string(name='RequestId', description='The ID of the request.', example='04F0F334-1335-436C-A1D7-6C044FE7****'),
  templateId?: string(name='TemplateId', description='The ID of the job template.', example='ehpc-job-tmpl-6RxO5y****'),
}

model EditJobTemplateResponse = {
  headers?: map[string]string(name='headers'),
  statusCode?: int32(name='statusCode'),
  body?: EditJobTemplateResponseBody(name='body'),
}

/**
 * @param request EditJobTemplateRequest
 * @param runtime runtime options for this request RuntimeOptions
 * @return EditJobTemplateResponse
 */
async function editJobTemplateWithOptions(request: EditJobTemplateRequest, runtime: $RuntimeOptions): EditJobTemplateResponse {
  request.validate();
  var query = OpenApiUtil.query(request.toMap());
  var req = new OpenApiUtil.OpenApiRequest{ 
    query = OpenApiUtil.query(query),
  };
  var params = new OpenApiUtil.Params{
    action = 'EditJobTemplate',
    version = '2018-04-12',
    protocol = 'HTTPS',
    pathname = '/',
    method = 'GET',
    authType = 'AK',
    style = 'RPC',
    reqBodyType = 'formData',
    bodyType = 'json',
  };
  return callApi(params, req, runtime);
}

/**
 * @param request EditJobTemplateRequest
 * @return EditJobTemplateResponse
 */
async function editJobTemplate(request: EditJobTemplateRequest): EditJobTemplateResponse {
  var runtime = new $RuntimeOptions{};
  return editJobTemplateWithOptions(request, runtime);
}

model GetAccountingReportRequest {
  clusterId?: string(name='ClusterId', description='The ID of the cluster.

This parameter is required.', example='ehpc-hz-FYUr32****'),
  dim?: string(name='Dim', description='The layers at which you want to query the bandwidth and traffic data. Valid values:

*   user: Query by user.
*   queue: Query by queue.
*   instance: Query by instance.', example='user'),
  endTime?: int32(name='EndTime', description='The end of the time range to query. This value is a UNIX timestamp representing the number of seconds that have elapsed since the epoch time January 1, 1970, 00:00:00 UTC.', example='1577441873'),
  filterValue?: string(name='FilterValue', description='The actual name of the dimension to be queried. Valid values:

*   If you set the value of the parameter Dim to user, the value of FilterValue is the name of the specified user.
*   If you set the value of the parameter Dim to queue, the value of FilterValue is the name of the specified queue.
*   If you set the value of the parameter Dim to instance, the value of FilterValue is the instance name.', example='userNo1'),
  jobId?: string(name='JobId', description='The ID of the job.', example='[{Id: 1.scheduler}]'),
  pageNumber?: int32(name='PageNumber', description='The number of entries to return on each page. Valid values: 1 to 50.

Default value: 10.', example='10'),
  pageSize?: int32(name='PageSize', description='The page number of the returned page.

Pages start from page 1.

Default value: 1.', example='1'),
  reportType?: string(name='ReportType', description='The query type. Valid values:

*   total_report: Queries the number of CPU cores in different dimensions.
*   job_report: Collects the historical node data of a node.
*   number_report: Queries job information in different dimensions.

This parameter is required.', example='job_report'),
  startTime?: int32(name='StartTime', description='The beginning of the time range to query. This value is a UNIX timestamp representing the number of seconds that have elapsed since the epoch time January 1, 1970, 00:00:00 UTC.', example='1576922873'),
}

model GetAccountingReportResponseBody = {
  data?: {
    data?: [ string ](name='Data')
  }(name='Data', description='The list serialized in the JSON format. The list contains multiple records.'),
  metrics?: string(name='Metrics', description='The list serialized in the JSON format. The list contains the column names of each record in the Data.', example='[\\\\"user\\\\",\\\\"coreTime\\\\",\\\\"usedMem\\\\"]'),
  pageNumber?: int32(name='PageNumber', description='The page number of the returned page.', example='1'),
  pageSize?: int32(name='PageSize', description='The number of entries returned per page.', example='10'),
  requestId?: string(name='RequestId', description='The ID of the request.', example='B1DCB399-9333-4B38-A35A-0BDFABC71881'),
  totalCoreTime?: int32(name='TotalCoreTime', description='The total number of CPU cores in the queried cluster.', example='261300'),
  totalCount?: int32(name='TotalCount', description='The total number of entries.', example='10'),
}

model GetAccountingReportResponse = {
  headers?: map[string]string(name='headers'),
  statusCode?: int32(name='statusCode'),
  body?: GetAccountingReportResponseBody(name='body'),
}

/**
 * @param request GetAccountingReportRequest
 * @param runtime runtime options for this request RuntimeOptions
 * @return GetAccountingReportResponse
 */
async function getAccountingReportWithOptions(request: GetAccountingReportRequest, runtime: $RuntimeOptions): GetAccountingReportResponse {
  request.validate();
  var query = OpenApiUtil.query(request.toMap());
  var req = new OpenApiUtil.OpenApiRequest{ 
    query = OpenApiUtil.query(query),
  };
  var params = new OpenApiUtil.Params{
    action = 'GetAccountingReport',
    version = '2018-04-12',
    protocol = 'HTTPS',
    pathname = '/',
    method = 'GET',
    authType = 'AK',
    style = 'RPC',
    reqBodyType = 'formData',
    bodyType = 'json',
  };
  return callApi(params, req, runtime);
}

/**
 * @param request GetAccountingReportRequest
 * @return GetAccountingReportResponse
 */
async function getAccountingReport(request: GetAccountingReportRequest): GetAccountingReportResponse {
  var runtime = new $RuntimeOptions{};
  return getAccountingReportWithOptions(request, runtime);
}

model GetAutoScaleConfigRequest {
  clusterId?: string(name='ClusterId', description='The cluster ID.

This parameter is required.', example='ehpc-hz-FYUr32****'),
}

model GetAutoScaleConfigResponseBody = {
  clusterId?: string(name='ClusterId', description='The prefix of the queue name. You can query queues that have a specified prefix.', example='ehpc-hz-FYUr32****'),
  clusterType?: string(name='ClusterType', description='The ID of the cluster.', example='pbs'),
  computeEnableHt?: boolean(name='ComputeEnableHt', description='Specifies whether to enable hyper-threading for the ECS instance that is used as the compute node.

>  You can only disable hyper-threading for some instance types. The hyper-threading is enabled for ECS instances by default. For more information, see [Specify and view CPU options](https://help.aliyun.com/document_detail/145895.html).', example='true'),
  dnsConfig?: string(name='DnsConfig', description='The configurations of DNS.', example='"{\\\\"DnsType\\\\":\\\\"PrivateZone\\\\",\\\\"DnsName\\\\":\\\\"xxxxx\\\\"}"'),
  enableAutoGrow?: boolean(name='EnableAutoGrow', description='The percentage of each round of scale-out. Valid values: 1 to 100.

If you set GrowRatio to 50, the scale-out has two rounds. Each round completes half of the scale-out.', example='true'),
  enableAutoShrink?: boolean(name='EnableAutoShrink', description='The number of consecutive times that a compute node is idle during the resource scale-in check. Valid values: 2 to 5.

If the parameter is set to 3, a compute node is idle for more than three consecutive times. In this case, the node is released.', example='true'),
  excludeNodes?: string(name='ExcludeNodes', description='The ID of the Alibaba Cloud account.', example='i-bp19lgqwxb4206t5****,i-bp1g4hvzs9pywrhb****'),
  extraNodesGrowRatio?: int32(name='ExtraNodesGrowRatio', description='The instance type of the compute nodes that were automatically added in the queue.', example='2'),
  growIntervalInMinutes?: int32(name='GrowIntervalInMinutes', description='The image ID of the compute nodes in the queue.', example='2'),
  growRatio?: int32(name='GrowRatio', description='The minimum number of compute nodes that can be retained in a queue. Valid values: 0 to 50.', example='100'),
  growTimeoutInMinutes?: int32(name='GrowTimeoutInMinutes', description='The maximum hourly price of the compute nodes. The value can be accurate to three decimal places. The parameter takes effect only when SpotStrategy is set to SpotWithPriceLimit.', example='20'),
  imageId?: string(name='ImageId', description='The preemption policy of the compute nodes. Valid values:

*   NoSpot: The compute nodes are pay-as-you-go instances.
*   SpotWithPriceLimit: The compute nodes are preemptible instances that have a user-defined maximum hourly price.
*   SpotAsPriceGo: The compute nodes are preemptible instances for which the market price at the time of purchase is used as the bid price.', example='m-bp10txryr4mhrrt1****'),
  maxNodesInCluster?: int32(name='MaxNodesInCluster', description='The interval between two consecutive rounds of scale-in. Unit: minutes. Valid values: 2 to 10.

>  An interval may exist during multiple rounds of a scale-out task or between two consecutive scale-out tasks.', example='300'),
  queues?: {
    queueInfo?: [ 
    {
      autoMinNodesPerCycle?: boolean(name='AutoMinNodesPerCycle', description='Indicates whether the minimum node number for each scale-out is automatically set. If this parameter is set to true, the minimum number of nodes for each scale-out is equal to the number of nodes required by the job. The maximum number is 99.', example='false'),
      dataDisks?: {
        dataDisksInfo?: [ 
        {
          dataDiskCategory?: string(name='DataDiskCategory', description='The type of the data disk. Valid values:

*   cloud_efficiency: ultra disk.
*   cloud_ssd: standard SSD.
*   cloud_essd: ESSD.
*   cloud: basic disk.', example='cloud_efficiency'),
          dataDiskDeleteWithInstance?: boolean(name='DataDiskDeleteWithInstance', description='Indicates whether the data disk is released when the node is released. Valid values:

*   true
*   false', example='true'),
          dataDiskEncrypted?: boolean(name='DataDiskEncrypted', description='Indicates whether the data disk is encrypted. Valid values:

*   true
*   false', example='false'),
          dataDiskKMSKeyId?: string(name='DataDiskKMSKeyId', description='The ID of the KMS key that is used by the data disk.', example='0e478b7a-4262-4802-b8cb-00d3fb40826X'),
          dataDiskPerformanceLevel?: string(name='DataDiskPerformanceLevel', description='The performance level of the ESSD used as the data disk. The parameter is returned only when the DataDisks.N.DataDiskCategory parameter is set to cloud_essd. Valid values:

*   PL0: An ESSD can deliver up to 10,000 random read/write IOPS.
*   PL1: An ESSD can deliver up to 50,000 random read/write IOPS.
*   PL2: An ESSD can deliver up to 100,000 random read/write IOPS.
*   PL3: An ESSD can deliver up to 1,000,000 random read/write IOPS.', example='PL1'),
          dataDiskSize?: int32(name='DataDiskSize', description='The capacity of the data disk. Unit: GB.

Valid values: 40 to 500.', example='40'),
        }
      ](name='DataDisksInfo')
      }(name='DataDisks', description='The list of data disks.'),
      enableAutoGrow?: boolean(name='EnableAutoGrow', description='Indicates whether the queue enabled the auto scale-out. Valid values:

*   true
*   false', example='true'),
      enableAutoShrink?: boolean(name='EnableAutoShrink', description='Indicates whether the queue enabled the auto scale-in. Valid values:

*   true
*   false', example='true'),
      hostNamePrefix?: string(name='HostNamePrefix', description='The prefix of the queue name. You can query queues that have a specified prefix.', example='compute'),
      hostNameSuffix?: string(name='HostNameSuffix', description='The suffix of the queue name. You can query queues that have a specified suffix.', example='000'),
      instanceType?: string(name='InstanceType', description='The instance type of the compute nodes that are automatically added to the queue.', example='ecs.sn1ne.large'),
      instanceTypes?: {
        instanceTypeInfo?: [ 
        {
          hostNamePrefix?: string(name='HostNamePrefix', description='The prefix of the hostname. You can query compute nodes that have a specified prefix.', example='compute'),
          instanceType?: string(name='InstanceType', description='The instance type of the compute nodes.', example='ecs.sn1ne.large'),
          spotDuration?: int32(name='SpotDuration', description='The protection period of the preemptible instance. Unit: hours. Valid values: 0 to 1. Default value: 1. A value of 0 means no protection period is specified.', example='0'),
          spotInterruptionBehavior?: string(name='SpotInterruptionBehavior', description='The interruption event of the preemptible instance. The value can only be Terminate, which specifies that the instance is released.', example='Terminate'),
          spotPriceLimit?: float(name='SpotPriceLimit', description='The maximum hourly price of the compute nodes. The value can be accurate to three decimal places. This parameter is valid only when the SpotStrategy parameter is set to SpotWithPriceLimit.', example='0.062'),
          spotStrategy?: string(name='SpotStrategy', description='The bidding method of the compute nodes. Valid values:

*   NoSpot: The compute nodes are pay-as-you-go instances.
*   SpotWithPriceLimit: The compute nodes are preemptible instances that have a user-defined maximum hourly price.
*   SpotAsPriceGo: The compute nodes are preemptible instances for which the market price at the time of purchase is used as the bid price.', example='NoSpot'),
          vSwitchId?: string(name='VSwitchId', description='The ID of the vSwitch.', example='vsw-bp1lfcjbfb099rrjn****'),
          zoneId?: string(name='ZoneId', description='The ID of the zone.', example='cn-hangzhou-b'),
        }
      ](name='InstanceTypeInfo')
      }(name='InstanceTypes', description='The specification information of the compute nodes.'),
      maxNodesInQueue?: int32(name='MaxNodesInQueue', description='The maximum number of compute nodes that can be added to a queue. Valid values: 0 to 500.', example='100'),
      maxNodesPerCycle?: long(name='MaxNodesPerCycle', description='The maximum number of compute nodes that can be added in each round of scale-out. Valid values: 0 to 99.

Default value: 0.', example='20'),
      minNodesInQueue?: int32(name='MinNodesInQueue', description='The minimum number of compute nodes that can be retained in a queue. Valid values: 0 to 50.', example='10'),
      minNodesPerCycle?: long(name='MinNodesPerCycle', description='The minimum number of compute nodes that can be added in each round of scale-out. Valid values: 1 to 99

Default value: 1.

If the compute nodes that you want to add in a round is less than the minimum compute nodes that can be added, the value of this parameter is automatically changed to the number of compute nodes that you want to add. This ensures that compute nodes can be added as expected.

>  The configuration takes effect only for the minimum compute nodes that can be added in the current round.', example='5'),
      queueImageId?: string(name='QueueImageId', description='The image ID of the compute node in the queue.', example='centos_7_06_64_20G_alibase_2019071****'),
      queueName?: string(name='QueueName', description='The name of the queue.', example='workq'),
      resourceGroupId?: string(name='ResourceGroupId', description='The ID of the resource group to which the compute nodes belong.', example='rg-acfmxp7uc24****'),
      sortedByInventory?: boolean(name='SortedByInventory', description='Indicates whether the instances are unordered. Valid values:

*   true
*   false

>  If this parameter is set to true, the system selects instance types in descending order based on the number of instances in stock during auto scaling.', example='false'),
      spotPriceLimit?: float(name='SpotPriceLimit', description='The maximum hourly price of the compute nodes. The value can be accurate to three decimal places. This parameter is valid only when the SpotStrategy parameter is set to SpotWithPriceLimit.', example='0.062'),
      spotStrategy?: string(name='SpotStrategy', description='The preemption policy of the compute nodes. Valid values:

*   NoSpot: The compute nodes are pay-as-you-go instances.
*   SpotWithPriceLimit: The compute nodes are preemptible instances that have a user-defined maximum hourly price.
*   SpotAsPriceGo: The compute nodes are preemptible instances for which the market price at the time of purchase is used as the bid price.', example='NoSpot'),
      systemDiskCategory?: string(name='SystemDiskCategory', description='The category of the system disk. Valid values:

*   cloud_efficiency: ultra disk.
*   cloud_ssd: standard SSD.
*   cloud_essd: enhanced SSD (ESSD).
*   cloud: basic disk.', example='cloud_efficiency'),
      systemDiskLevel?: string(name='SystemDiskLevel', description='The performance level of the system disk. Valid values:

*   PL0: An ESSD can deliver up to 10,000 random read/write IOPS.
*   PL1: An ESSD can deliver up to 50,000 random read/write IOPS.
*   PL2: An ESSD can deliver up to 100,000 random read/write IOPS.
*   PL3: An ESSD can deliver up to 1,000,000 random read/write IOPS.', example='PL1'),
      systemDiskSize?: int32(name='SystemDiskSize', description='The system disk size. Unit: GB. Valid values: 40 to 500.', example='40'),
    }
  ](name='QueueInfo')
  }(name='Queues', description='The auto scaling configuration of the queue.

>  If auto scaling is enabled for the cluster and queue at the same time, the queue settings prevail.'),
  requestId?: string(name='RequestId', description='The image ID of the compute nodes in the queue.', example='04F0F334-1335-436C-A1D7-6C044FE73368'),
  shrinkIdleTimes?: int32(name='ShrinkIdleTimes', description='The suffix of the queue name. You can query queues that have a specified suffix.', example='3'),
  shrinkIntervalInMinutes?: int32(name='ShrinkIntervalInMinutes', description='The auto scaling configuration of the queue.

>  If auto scaling is enabled for the cluster and queue at the same time, the queue settings prevail.', example='2'),
  spotPriceLimit?: float(name='SpotPriceLimit', description='The type of the system disk. Valid values:

*   cloud_efficiency: ultra disk
*   cloud_ssd: SSD
*   cloud_essd: ESSD
*   cloud: basic disk', example='0.062'),
  spotStrategy?: string(name='SpotStrategy', description='The percentage of extra compute nodes. Valid values: 0 to 100.

If you need to add 100 compute nodes and the value of the ExtraNodesGrowRatio parameter is 2, 102 compute nodes are added.', example='SpotWithPriceLimit'),
  uid?: string(name='Uid', description='The size of the system disk. Unit: GB. Valid values: 40 to 500.', example='129845258050****'),
}

model GetAutoScaleConfigResponse = {
  headers?: map[string]string(name='headers'),
  statusCode?: int32(name='statusCode'),
  body?: GetAutoScaleConfigResponseBody(name='body'),
}

/**
 * @summary Obtains the auto scaling settings of a cluster.
 *
 * @param request GetAutoScaleConfigRequest
 * @param runtime runtime options for this request RuntimeOptions
 * @return GetAutoScaleConfigResponse
 */
async function getAutoScaleConfigWithOptions(request: GetAutoScaleConfigRequest, runtime: $RuntimeOptions): GetAutoScaleConfigResponse {
  request.validate();
  var query = OpenApiUtil.query(request.toMap());
  var req = new OpenApiUtil.OpenApiRequest{ 
    query = OpenApiUtil.query(query),
  };
  var params = new OpenApiUtil.Params{
    action = 'GetAutoScaleConfig',
    version = '2018-04-12',
    protocol = 'HTTPS',
    pathname = '/',
    method = 'GET',
    authType = 'AK',
    style = 'RPC',
    reqBodyType = 'formData',
    bodyType = 'json',
  };
  return callApi(params, req, runtime);
}

/**
 * @summary Obtains the auto scaling settings of a cluster.
 *
 * @param request GetAutoScaleConfigRequest
 * @return GetAutoScaleConfigResponse
 */
async function getAutoScaleConfig(request: GetAutoScaleConfigRequest): GetAutoScaleConfigResponse {
  var runtime = new $RuntimeOptions{};
  return getAutoScaleConfigWithOptions(request, runtime);
}

model GetCloudMetricLogsRequest {
  aggregationInterval?: int32(name='AggregationInterval', description='The data aggregation interval. Unit: seconds.

Valid values: 1, 10, 60, 600, and 3600.

Default value: 1.', example='10'),
  aggregationType?: string(name='AggregationType', description='The data aggregation type. Valid values:

*   sum: the sum of the data
*   avg: the average value
*   max: the maximum value
*   min: the minimum value

Aggregation is disabled by default.', example='avg'),
  clusterId?: string(name='ClusterId', description='The cluster ID.

This parameter is required.', example='ehpc-hz-jeJki6****'),
  filter?: string(name='Filter', description='The filter conditions. A JSON-formatted string that contains several key-value pairs. Valid values of the key:

*   InstanceId: the ID of the node
*   Hostname: the hostname of the node
*   NetworkInterface: the name of the network interface
*   DiskDevice: the name of the disk', example='{"Hostname":"compute000"}'),
  from?: int32(name='From', description='The beginning of the time range to query. The time is a timestamp. This value is a UNIX timestamp representing the number of seconds that have elapsed since the epoch time January 1, 1970, 00:00:00 UTC.

This parameter is required.', example='1583907780'),
  metricCategories?: string(name='MetricCategories', description='The category of the output performance metrics. Separate multiple metrics with commas (,). Valid values:

*   cpu
*   memory', example='cpu'),
  metricScope?: string(name='MetricScope', description='The dimensions of the performance metric. Valid values:

*   machine
*   process
*   network
*   disk', example='network'),
  reverse?: boolean(name='Reverse', description='Specifies whether to return logs in reverse order of timestamps. Default value: false.', example='false'),
  to?: int32(name='To', description='The end of the time range to query. The time is a timestamp. This value is a UNIX timestamp representing the number of seconds that have elapsed since the epoch time January 1, 1970, 00:00:00 UTC.

This parameter is required.', example='1583907790'),
}

model GetCloudMetricLogsResponseBody = {
  metricLogs?: {
    metricLog?: [ 
    {
      diskDevice?: string(name='DiskDevice', description='The name of the disk.', example='vda1'),
      hostname?: string(name='Hostname', description='The hostname of the node.', example='compute000'),
      instanceId?: string(name='InstanceId', description='The node ID.', example='i-bp132g97g7zwnvta****'),
      metricData?: string(name='MetricData', description='A JSON-formatted serialized string that contains performance metric data of multiple categories.', example='{\\\\"process|cpusage\\\\":0,\\\\"process|cpuser\\\\":0,\\\\"process|cpusys\\\\":0,******}'),
      networkInterface?: string(name='NetworkInterface', description='The name of the network interface.', example='eth1'),
      time?: int32(name='Time', description='The timestamp of the log. The time is a timestamp. This value is a UNIX timestamp representing the number of seconds that have elapsed since the epoch time January 1, 1970, 00:00:00 UTC.', example='1583907780'),
    }
  ](name='MetricLog')
  }(name='MetricLogs', description='The queried performance metric data.'),
  requestId?: string(name='RequestId', description='The request ID.', example='015C2C4D-1884-4EB7-BCD3-C5BB8D7E56DB'),
}

model GetCloudMetricLogsResponse = {
  headers?: map[string]string(name='headers'),
  statusCode?: int32(name='statusCode'),
  body?: GetCloudMetricLogsResponseBody(name='body'),
}

/**
 * @summary Reads performance metrics (CloudMetrics) logs of E-HPC.
 *
 * @param request GetCloudMetricLogsRequest
 * @param runtime runtime options for this request RuntimeOptions
 * @return GetCloudMetricLogsResponse
 */
async function getCloudMetricLogsWithOptions(request: GetCloudMetricLogsRequest, runtime: $RuntimeOptions): GetCloudMetricLogsResponse {
  request.validate();
  var query = OpenApiUtil.query(request.toMap());
  var req = new OpenApiUtil.OpenApiRequest{ 
    query = OpenApiUtil.query(query),
  };
  var params = new OpenApiUtil.Params{
    action = 'GetCloudMetricLogs',
    version = '2018-04-12',
    protocol = 'HTTPS',
    pathname = '/',
    method = 'GET',
    authType = 'AK',
    style = 'RPC',
    reqBodyType = 'formData',
    bodyType = 'json',
  };
  return callApi(params, req, runtime);
}

/**
 * @summary Reads performance metrics (CloudMetrics) logs of E-HPC.
 *
 * @param request GetCloudMetricLogsRequest
 * @return GetCloudMetricLogsResponse
 */
async function getCloudMetricLogs(request: GetCloudMetricLogsRequest): GetCloudMetricLogsResponse {
  var runtime = new $RuntimeOptions{};
  return getCloudMetricLogsWithOptions(request, runtime);
}

model GetCloudMetricProfilingRequest {
  clusterId?: string(name='ClusterId', description='The ID of the cluster.

This parameter is required.', example='ehpc-hz-jeJki6****'),
  profilingId?: string(name='ProfilingId', description='The profiling ID. You can call the [ListCloudMetricProfilings](https://help.aliyun.com/document_detail/188711.html) operation to obtain the profiling ID.

This parameter is required.', example='ehpc-hz-i-bplukzqgl****_21687_2019-09-09-02-37-40'),
  regionId?: string(name='RegionId', description='The ID of the region.', example='cn-hangzhou'),
}

model GetCloudMetricProfilingResponseBody = {
  requestId?: string(name='RequestId', description='The ID of the request.', example='0DD6F715-85EE-4EA6-BDC4-48A75B719068'),
  svgUrls?: {
    svgInfo?: [ 
    {
      name?: string(name='Name', description='The name of the SVG file that contains the profiling results.', example='ehpc-hz-faRavbPf6b_i-bdrftgyh890654****_21687_2019-09-09-02-37-40.bottomup.svg'),
      size?: int32(name='Size', description='The size of the SVG file. Unit: bytes.', example='648'),
      type?: string(name='Type', description='The type of the SVG file.', example='file'),
      url?: string(name='Url', description='The URL of the Object Storage Service (OSS) bucket where the scalable vector graphics (SVG) file is stored.'),
    }
  ](name='SvgInfo')
  }(name='SvgUrls', description='The list of profiling results.'),
}

model GetCloudMetricProfilingResponse = {
  headers?: map[string]string(name='headers'),
  statusCode?: int32(name='statusCode'),
  body?: GetCloudMetricProfilingResponseBody(name='body'),
}

/**
 * @param request GetCloudMetricProfilingRequest
 * @param runtime runtime options for this request RuntimeOptions
 * @return GetCloudMetricProfilingResponse
 */
async function getCloudMetricProfilingWithOptions(request: GetCloudMetricProfilingRequest, runtime: $RuntimeOptions): GetCloudMetricProfilingResponse {
  request.validate();
  var query = OpenApiUtil.query(request.toMap());
  var req = new OpenApiUtil.OpenApiRequest{ 
    query = OpenApiUtil.query(query),
  };
  var params = new OpenApiUtil.Params{
    action = 'GetCloudMetricProfiling',
    version = '2018-04-12',
    protocol = 'HTTPS',
    pathname = '/',
    method = 'GET',
    authType = 'AK',
    style = 'RPC',
    reqBodyType = 'formData',
    bodyType = 'json',
  };
  return callApi(params, req, runtime);
}

/**
 * @param request GetCloudMetricProfilingRequest
 * @return GetCloudMetricProfilingResponse
 */
async function getCloudMetricProfiling(request: GetCloudMetricProfilingRequest): GetCloudMetricProfilingResponse {
  var runtime = new $RuntimeOptions{};
  return getCloudMetricProfilingWithOptions(request, runtime);
}

model GetClusterVolumesRequest {
  clusterId?: string(name='ClusterId', description='The ID of the cluster.

You can call the [ListClusters](https://help.aliyun.com/document_detail/87116.html) operation to query the cluster ID.

This parameter is required.', example='ehpc-hz-gh5WKb****'),
}

model GetClusterVolumesResponseBody = {
  regionId?: string(name='RegionId', description='The ID of the region.', example='cn-hangzhou'),
  requestId?: string(name='RequestId', description='The ID of the request.', example='8BCFD52E-0336-4490-AE7D-F560F106****'),
  volumes?: {
    volumeInfo?: [ 
    {
      jobQueue?: string(name='JobQueue', description='The queue of the job.', example='workq'),
      localDirectory?: string(name='LocalDirectory', description='The local mount directory.', example='/ehpcdata'),
      location?: string(name='Location', description='The type of cluster. Valid values:

*   OnPremise: The cluster is deployed on a hybrid cloud.
*   PublicCloud: The cluster is deployed on a public cloud.', example='PublicCloud'),
      mustKeep?: boolean(name='MustKeep', description='Indicates whether the resource can be unmounted.', example='true'),
      remoteDirectory?: string(name='RemoteDirectory', description='The remote mount directory.', example='/test'),
      roles?: {
        roleInfo?: [ 
        {
          name?: string(name='Name', description='The type of the node on which the file system is mounted. Valid values:

*   Compute: compute node
*   Manager: management node
*   Login: logon node', example='Compute'),
        }
      ](name='RoleInfo')
      }(name='Roles', description='The array of the node on which the file system is mounted.'),
      volumeId?: string(name='VolumeId', description='The ID of the file system.', example='0e754****'),
      volumeMountpoint?: string(name='VolumeMountpoint', description='The address of the mount target.', example='0e754****-kal90.cn-hangzhou.nas.aliyuncs.com'),
      volumeProtocol?: string(name='VolumeProtocol', description='The storage protocol type of the file system. Valid values:

*   NFS
*   SMB', example='NFS'),
      volumeType?: string(name='VolumeType', description='The type of the file system. Valid values:

*   NAS', example='NAS'),
    }
  ](name='VolumeInfo')
  }(name='Volumes', description='The array of the file system mounted to the E-HPC cluster.'),
}

model GetClusterVolumesResponse = {
  headers?: map[string]string(name='headers'),
  statusCode?: int32(name='statusCode'),
  body?: GetClusterVolumesResponseBody(name='body'),
}

/**
 * @summary Queries the information of the NAS file system mounted to a specified cluster.
 *
 * @param request GetClusterVolumesRequest
 * @param runtime runtime options for this request RuntimeOptions
 * @return GetClusterVolumesResponse
 */
async function getClusterVolumesWithOptions(request: GetClusterVolumesRequest, runtime: $RuntimeOptions): GetClusterVolumesResponse {
  request.validate();
  var query = OpenApiUtil.query(request.toMap());
  var req = new OpenApiUtil.OpenApiRequest{ 
    query = OpenApiUtil.query(query),
  };
  var params = new OpenApiUtil.Params{
    action = 'GetClusterVolumes',
    version = '2018-04-12',
    protocol = 'HTTPS',
    pathname = '/',
    method = 'GET',
    authType = 'AK',
    style = 'RPC',
    reqBodyType = 'formData',
    bodyType = 'json',
  };
  return callApi(params, req, runtime);
}

/**
 * @summary Queries the information of the NAS file system mounted to a specified cluster.
 *
 * @param request GetClusterVolumesRequest
 * @return GetClusterVolumesResponse
 */
async function getClusterVolumes(request: GetClusterVolumesRequest): GetClusterVolumesResponse {
  var runtime = new $RuntimeOptions{};
  return getClusterVolumesWithOptions(request, runtime);
}

model GetHybridClusterConfigRequest {
  clusterId?: string(name='ClusterId', description='The ID of the cluster.

This parameter is required.', example='ehpc-hz-FYUr32****'),
  node?: string(name='Node', description='The name of the on-premises compute node. You can call this operation to query the configurations of the on-premises compute node.

By default, the operation queries the configurations of a cluster.', example='testNode'),
}

model GetHybridClusterConfigResponseBody = {
  clusterConfig?: string(name='ClusterConfig', description='The configurations returned.

*   If the parameter Node is null, you can obtain the configurations of the hybrid cloud cluster.
*   If the parameter Node is a specified on-premises compute node, you can obtain the configurations of the on-premises compute node.

This parameter is returned in the ini format. You can use this parameter to configure on-premises cluster nodes.', example='ClNjaGcyI6W119Cg****'),
  requestId?: string(name='RequestId', description='The ID of the request.', example='04F0F334-1335-436C-A1D7-6C044FE73368'),
}

model GetHybridClusterConfigResponse = {
  headers?: map[string]string(name='headers'),
  statusCode?: int32(name='statusCode'),
  body?: GetHybridClusterConfigResponseBody(name='body'),
}

/**
 * @param request GetHybridClusterConfigRequest
 * @param runtime runtime options for this request RuntimeOptions
 * @return GetHybridClusterConfigResponse
 */
async function getHybridClusterConfigWithOptions(request: GetHybridClusterConfigRequest, runtime: $RuntimeOptions): GetHybridClusterConfigResponse {
  request.validate();
  var query = OpenApiUtil.query(request.toMap());
  var req = new OpenApiUtil.OpenApiRequest{ 
    query = OpenApiUtil.query(query),
  };
  var params = new OpenApiUtil.Params{
    action = 'GetHybridClusterConfig',
    version = '2018-04-12',
    protocol = 'HTTPS',
    pathname = '/',
    method = 'GET',
    authType = 'AK',
    style = 'RPC',
    reqBodyType = 'formData',
    bodyType = 'json',
  };
  return callApi(params, req, runtime);
}

/**
 * @param request GetHybridClusterConfigRequest
 * @return GetHybridClusterConfigResponse
 */
async function getHybridClusterConfig(request: GetHybridClusterConfigRequest): GetHybridClusterConfigResponse {
  var runtime = new $RuntimeOptions{};
  return getHybridClusterConfigWithOptions(request, runtime);
}

model GetIfEcsTypeSupportHtConfigRequest {
  instanceType?: string(name='InstanceType', description='The Elastic Compute Service (ECS) instance type.

This parameter is required.', example='ecs.g6.large'),
}

model GetIfEcsTypeSupportHtConfigResponseBody = {
  defaultHtEnabled?: boolean(name='DefaultHtEnabled', description='Indicates whether Hyper-Threading is enabled by default. Valid values:

*   true: Hyper-Threading is enabled by default.
*   false: Hyper-Threading is disabled by default.

>  By default, Hyper-Threading is not enabled for Super Computing Cluster (SCC) instance families but is enabled for other instance families.', example='true'),
  instanceType?: string(name='InstanceType', description='The ECS instance type.', example='ecs.g6.large'),
  requestId?: string(name='RequestId', description='The request ID.', example='80CA7A93-7291-4402-B63D-86DF334E0A1F'),
  supportHtConfig?: boolean(name='SupportHtConfig', description='Indicates whether hyper-threading is supported. Valid values:

*   true: Hyper-threading is supported.
*   false: Hyper-threading is not supported.', example='true'),
}

model GetIfEcsTypeSupportHtConfigResponse = {
  headers?: map[string]string(name='headers'),
  statusCode?: int32(name='statusCode'),
  body?: GetIfEcsTypeSupportHtConfigResponseBody(name='body'),
}

/**
 * @summary Queries whether hyper-threading can be enabled or disabled for an instance type.
 *
 * @param request GetIfEcsTypeSupportHtConfigRequest
 * @param runtime runtime options for this request RuntimeOptions
 * @return GetIfEcsTypeSupportHtConfigResponse
 */
async function getIfEcsTypeSupportHtConfigWithOptions(request: GetIfEcsTypeSupportHtConfigRequest, runtime: $RuntimeOptions): GetIfEcsTypeSupportHtConfigResponse {
  request.validate();
  var query = OpenApiUtil.query(request.toMap());
  var req = new OpenApiUtil.OpenApiRequest{ 
    query = OpenApiUtil.query(query),
  };
  var params = new OpenApiUtil.Params{
    action = 'GetIfEcsTypeSupportHtConfig',
    version = '2018-04-12',
    protocol = 'HTTPS',
    pathname = '/',
    method = 'GET',
    authType = 'AK',
    style = 'RPC',
    reqBodyType = 'formData',
    bodyType = 'json',
  };
  return callApi(params, req, runtime);
}

/**
 * @summary Queries whether hyper-threading can be enabled or disabled for an instance type.
 *
 * @param request GetIfEcsTypeSupportHtConfigRequest
 * @return GetIfEcsTypeSupportHtConfigResponse
 */
async function getIfEcsTypeSupportHtConfig(request: GetIfEcsTypeSupportHtConfigRequest): GetIfEcsTypeSupportHtConfigResponse {
  var runtime = new $RuntimeOptions{};
  return getIfEcsTypeSupportHtConfigWithOptions(request, runtime);
}

model GetJobLogRequest {
  clusterId?: string(name='ClusterId', description='The ID of the cluster.

This parameter is required.', example='ehpc-hz-jeJki6****'),
  execHost?: string(name='ExecHost', description='The node on which the job runs.

*   If the job is completed, you do not need to specify the parameter.
*   If the job is running, you must specify the parameter.', example='compute000'),
  jobId?: string(name='JobId', description='The ID of the job.

This parameter is required.', example='1.scheduler****'),
  offset?: long(name='Offset', description='The position where logs start to be read.

Unit: bits

Default value: 0', example='0'),
  size?: int32(name='Size', description='The maximum size of logs that you can read in a single request.

Unit: bits

Default value: 1024', example='1024'),
}

model GetJobLogResponseBody = {
  errorLog?: string(name='ErrorLog', description='The content of the error logs. The content is encoded in Base64.', example='c2xlZXAgMzA='),
  jobId?: string(name='JobId', description='The ID of the job.', example='1.scheduler****'),
  outputLog?: string(name='OutputLog', description='The content of the output logs. The content is encoded in Base64.', example='c2xlZXAgMzA='),
  requestId?: string(name='RequestId', description='The ID of the task.', example='B745C159-3155-4B94-95D0-4B73D4D2****'),
}

model GetJobLogResponse = {
  headers?: map[string]string(name='headers'),
  statusCode?: int32(name='statusCode'),
  body?: GetJobLogResponseBody(name='body'),
}

/**
 * @summary 实时查询任务的输出日志
 *
 * @param request GetJobLogRequest
 * @param runtime runtime options for this request RuntimeOptions
 * @return GetJobLogResponse
 */
async function getJobLogWithOptions(request: GetJobLogRequest, runtime: $RuntimeOptions): GetJobLogResponse {
  request.validate();
  var query = OpenApiUtil.query(request.toMap());
  var req = new OpenApiUtil.OpenApiRequest{ 
    query = OpenApiUtil.query(query),
  };
  var params = new OpenApiUtil.Params{
    action = 'GetJobLog',
    version = '2018-04-12',
    protocol = 'HTTPS',
    pathname = '/',
    method = 'GET',
    authType = 'AK',
    style = 'RPC',
    reqBodyType = 'formData',
    bodyType = 'json',
  };
  return callApi(params, req, runtime);
}

/**
 * @summary 实时查询任务的输出日志
 *
 * @param request GetJobLogRequest
 * @return GetJobLogResponse
 */
async function getJobLog(request: GetJobLogRequest): GetJobLogResponse {
  var runtime = new $RuntimeOptions{};
  return getJobLogWithOptions(request, runtime);
}

model GetPostScriptsRequest {
  clusterId?: string(name='ClusterId', description='The cluster ID.

You can call the [ListClusters](https://help.aliyun.com/document_detail/87116.html) operation to obtain the cluster ID.

This parameter is required.', example='ehpc-sh-EnjshUxn'),
  regionId?: string(name='RegionId', description='The ID of the region where the cluster resides.

You can call the [ListRegions](https://help.aliyun.com/document_detail/188593.html) operation to query the latest region list.

This parameter is required.', example='cn-shanghai'),
}

model GetPostScriptsResponseBody = {
  postInstallScripts?: [ 
    {
      args?: string(name='Args', description='The parameter that is used to run the post-installation script.', example='-h'),
      url?: string(name='Url', description='The URL that is used to download the post-installation script.', example='https://bucket.oss-cn-shanghai.aliyuncs.com/postscript_examples.sh'),
    }
  ](name='PostInstallScripts', description='The post-installation scripts.'),
  requestId?: string(name='RequestId', description='The request ID.', example='B745C159-3155-4B94-95D0-4B73D4D2****'),
}

model GetPostScriptsResponse = {
  headers?: map[string]string(name='headers'),
  statusCode?: int32(name='statusCode'),
  body?: GetPostScriptsResponseBody(name='body'),
}

/**
 * @summary Queries the post-processing scripts of a cluster.
 *
 * @param request GetPostScriptsRequest
 * @param runtime runtime options for this request RuntimeOptions
 * @return GetPostScriptsResponse
 */
async function getPostScriptsWithOptions(request: GetPostScriptsRequest, runtime: $RuntimeOptions): GetPostScriptsResponse {
  request.validate();
  var query = OpenApiUtil.query(request.toMap());
  var req = new OpenApiUtil.OpenApiRequest{ 
    query = OpenApiUtil.query(query),
  };
  var params = new OpenApiUtil.Params{
    action = 'GetPostScripts',
    version = '2018-04-12',
    protocol = 'HTTPS',
    pathname = '/',
    method = 'GET',
    authType = 'AK',
    style = 'RPC',
    reqBodyType = 'formData',
    bodyType = 'json',
  };
  return callApi(params, req, runtime);
}

/**
 * @summary Queries the post-processing scripts of a cluster.
 *
 * @param request GetPostScriptsRequest
 * @return GetPostScriptsResponse
 */
async function getPostScripts(request: GetPostScriptsRequest): GetPostScriptsResponse {
  var runtime = new $RuntimeOptions{};
  return getPostScriptsWithOptions(request, runtime);
}

model GetSchedulerInfoRequest {
  clusterId?: string(name='ClusterId', description='The cluster ID.

This parameter is required.', example='ehpc-hz-FYUr32****'),
  regionId?: string(name='RegionId', description='The region ID of the cluster.

This parameter is required.', example='cn-hangzhou'),
  scheduler?: [ 
    {
      schedName?: string(name='SchedName', description='The scheduler name. Valid values:

*   pbs
*   pbs19
*   slurm
*   slurm19
*   slurm20

Valid values of N: 0 to 100.', example='pbs'),
    }
  ](name='Scheduler', description='The detailed settings of the scheduler.

This parameter is required.'),
}

model GetSchedulerInfoResponseBody = {
  requestId?: string(name='RequestId', description='The request ID.', example='BBC2F93D-003A-49C4-850C-B826EECF****'),
  schedInfo?: [ 
    {
      configuration?: string(name='Configuration', description='The detailed settings of the scheduler.', example='{"AclInfo":[{"AclEnable": false,"UntrackUser": [],"User": [],"QueueName": "workq"}],"JobHistory": "","SchedIteration": "60","QueueResource": [{"UntrackUser": [],"User": [],"QueueName": "workq"}]}'),
      schedName?: string(name='SchedName', description='The type of the scheduler.', example='pbs'),
    }
  ](name='SchedInfo', description='The settings of the scheduler.'),
}

model GetSchedulerInfoResponse = {
  headers?: map[string]string(name='headers'),
  statusCode?: int32(name='statusCode'),
  body?: GetSchedulerInfoResponseBody(name='body'),
}

/**
 * @summary Queries the scheduler settings of a cluster.
 *
 * @param request GetSchedulerInfoRequest
 * @param runtime runtime options for this request RuntimeOptions
 * @return GetSchedulerInfoResponse
 */
async function getSchedulerInfoWithOptions(request: GetSchedulerInfoRequest, runtime: $RuntimeOptions): GetSchedulerInfoResponse {
  request.validate();
  var query = OpenApiUtil.query(request.toMap());
  var req = new OpenApiUtil.OpenApiRequest{ 
    query = OpenApiUtil.query(query),
  };
  var params = new OpenApiUtil.Params{
    action = 'GetSchedulerInfo',
    version = '2018-04-12',
    protocol = 'HTTPS',
    pathname = '/',
    method = 'GET',
    authType = 'AK',
    style = 'RPC',
    reqBodyType = 'formData',
    bodyType = 'json',
  };
  return callApi(params, req, runtime);
}

/**
 * @summary Queries the scheduler settings of a cluster.
 *
 * @param request GetSchedulerInfoRequest
 * @return GetSchedulerInfoResponse
 */
async function getSchedulerInfo(request: GetSchedulerInfoRequest): GetSchedulerInfoResponse {
  var runtime = new $RuntimeOptions{};
  return getSchedulerInfoWithOptions(request, runtime);
}

model GetVisualServiceStatusRequest {
  clusterId?: string(name='ClusterId', description='The cluster ID.

You can call the [ListClusters](https://help.aliyun.com/document_detail/87116.html) operation to query the cluster ID.

This parameter is required.', example='ehpc-hz-jeJki6****'),
}

model GetVisualServiceStatusResponseBody = {
  message?: string(name='Message', description='The returned message.', example='inactive (dead) , ws service is not running.'),
  requestId?: string(name='RequestId', description='The request ID.', example='896D338C-E4F4-41EC-A154-D605E5DE****'),
}

model GetVisualServiceStatusResponse = {
  headers?: map[string]string(name='headers'),
  statusCode?: int32(name='statusCode'),
  body?: GetVisualServiceStatusResponseBody(name='body'),
}

/**
 * @summary Queries the status of the VNC service in a cluster.
 *
 * @param request GetVisualServiceStatusRequest
 * @param runtime runtime options for this request RuntimeOptions
 * @return GetVisualServiceStatusResponse
 */
async function getVisualServiceStatusWithOptions(request: GetVisualServiceStatusRequest, runtime: $RuntimeOptions): GetVisualServiceStatusResponse {
  request.validate();
  var query = OpenApiUtil.query(request.toMap());
  var req = new OpenApiUtil.OpenApiRequest{ 
    query = OpenApiUtil.query(query),
  };
  var params = new OpenApiUtil.Params{
    action = 'GetVisualServiceStatus',
    version = '2018-04-12',
    protocol = 'HTTPS',
    pathname = '/',
    method = 'GET',
    authType = 'AK',
    style = 'RPC',
    reqBodyType = 'formData',
    bodyType = 'json',
  };
  return callApi(params, req, runtime);
}

/**
 * @summary Queries the status of the VNC service in a cluster.
 *
 * @param request GetVisualServiceStatusRequest
 * @return GetVisualServiceStatusResponse
 */
async function getVisualServiceStatus(request: GetVisualServiceStatusRequest): GetVisualServiceStatusResponse {
  var runtime = new $RuntimeOptions{};
  return getVisualServiceStatusWithOptions(request, runtime);
}

model InitializeEHPCRequest {
  regionId?: string(name='RegionId', description='The ID of the region where the service-linked role is created.

You can call the [ListRegions](https://help.aliyun.com/document_detail/188593.html) operation to obtain the IDs of regions supported by E-HPC.', example='cn-hangzhou'),
  serviceName?: string(name='ServiceName', description='The name of the service for which you must create a service-linked role. Valid values:

*   E-HPC: You must create the AliyunServiceRoleForEHPC service-linked role.
*   E-HPC Instant: You must create the AliyunServiceRoleForEHPCManagedNetwork service-linked role.

>  This parameter is not publicly available.', example='E-HPC'),
}

model InitializeEHPCResponseBody = {
  requestId?: string(name='RequestId', description='The request ID.', example='04F0F334-1335-436C-A1D7-6C044FE7****'),
}

model InitializeEHPCResponse = {
  headers?: map[string]string(name='headers'),
  statusCode?: int32(name='statusCode'),
  body?: InitializeEHPCResponseBody(name='body'),
}

/**
 * @summary Creates a service-linked role for Elastic High Performance Computing (E-HPC). A service-linked role is required for you to use E-HPC.
 *
 * @param request InitializeEHPCRequest
 * @param runtime runtime options for this request RuntimeOptions
 * @return InitializeEHPCResponse
 */
async function initializeEHPCWithOptions(request: InitializeEHPCRequest, runtime: $RuntimeOptions): InitializeEHPCResponse {
  request.validate();
  var query = OpenApiUtil.query(request.toMap());
  var req = new OpenApiUtil.OpenApiRequest{ 
    query = OpenApiUtil.query(query),
  };
  var params = new OpenApiUtil.Params{
    action = 'InitializeEHPC',
    version = '2018-04-12',
    protocol = 'HTTPS',
    pathname = '/',
    method = 'GET',
    authType = 'AK',
    style = 'RPC',
    reqBodyType = 'formData',
    bodyType = 'json',
  };
  return callApi(params, req, runtime);
}

/**
 * @summary Creates a service-linked role for Elastic High Performance Computing (E-HPC). A service-linked role is required for you to use E-HPC.
 *
 * @param request InitializeEHPCRequest
 * @return InitializeEHPCResponse
 */
async function initializeEHPC(request: InitializeEHPCRequest): InitializeEHPCResponse {
  var runtime = new $RuntimeOptions{};
  return initializeEHPCWithOptions(request, runtime);
}

model InstallSoftwareRequest {
  application?: string(name='Application', description='The name of the software that you want to install.

You can call the [ListSoftwares](https://help.aliyun.com/document_detail/87216.html) operation to query the software that can be installed.

This parameter is required.', example='ABYSS_2.1.5'),
  clusterId?: string(name='ClusterId', description='The cluster ID.

You can call the [ListClusters](https://help.aliyun.com/document_detail/87116.html) operation to query the cluster ID.

This parameter is required.', example='ehpc-hz-jeJki6****'),
}

model InstallSoftwareResponseBody = {
  requestId?: string(name='RequestId', description='The request ID.', example='896D338C-E4F4-41EC-A154-D605E5DE****'),
}

model InstallSoftwareResponse = {
  headers?: map[string]string(name='headers'),
  statusCode?: int32(name='statusCode'),
  body?: InstallSoftwareResponseBody(name='body'),
}

/**
 * @summary Installs software in a cluster.
 *
 * @param request InstallSoftwareRequest
 * @param runtime runtime options for this request RuntimeOptions
 * @return InstallSoftwareResponse
 */
async function installSoftwareWithOptions(request: InstallSoftwareRequest, runtime: $RuntimeOptions): InstallSoftwareResponse {
  request.validate();
  var query = OpenApiUtil.query(request.toMap());
  var req = new OpenApiUtil.OpenApiRequest{ 
    query = OpenApiUtil.query(query),
  };
  var params = new OpenApiUtil.Params{
    action = 'InstallSoftware',
    version = '2018-04-12',
    protocol = 'HTTPS',
    pathname = '/',
    method = 'GET',
    authType = 'AK',
    style = 'RPC',
    reqBodyType = 'formData',
    bodyType = 'json',
  };
  return callApi(params, req, runtime);
}

/**
 * @summary Installs software in a cluster.
 *
 * @param request InstallSoftwareRequest
 * @return InstallSoftwareResponse
 */
async function installSoftware(request: InstallSoftwareRequest): InstallSoftwareResponse {
  var runtime = new $RuntimeOptions{};
  return installSoftwareWithOptions(request, runtime);
}

model InvokeShellCommandRequest {
  clusterId?: string(name='ClusterId', description='The cluster ID.

You can call the [ListClusters](https://help.aliyun.com/document_detail/87116.html) operation to query the cluster ID.

This parameter is required.', example='ehpc-hz-FYUr32****'),
  command?: string(name='Command', description='The content of the command. The content must be 2 to 2,048 characters in length.

This parameter is required.', example='echo "hello world"'),
  instance?: [ 
    {
      id?: string(name='Id', description='The ID of the Nth node instance on which the command is run.

> This parameter specifies the node on which the command is run. If it is not specified, the command will be run on all nodes of the cluster.', example='i-bp1in9hmw3ur52x0****'),
    }
  ](name='Instance', description='The information of nodes on which the command is run.'),
  timeout?: int32(name='Timeout', description='The timeout period. If a command times out, the command process will be terminated. Unit: seconds.

Default value: 60.', example='3600'),
  workingDir?: string(name='WorkingDir', description='The working directory of the command. Default value: `/root`.', example='/home'),
}

model InvokeShellCommandResponseBody = {
  commandId?: string(name='CommandId', description='The ID of the command. It is used to query the execution status of the command.', example='c-hz01v8vudql****'),
  instanceIds?: {
    instanceId?: [ string ](name='InstanceId')
  }(name='InstanceIds', description='The list of IDs of the instances on which you want to run the command.'),
  requestId?: string(name='RequestId', description='The ID of the request.', example='04F0F334-1335-436C-A1D7-6C044FE73368'),
}

model InvokeShellCommandResponse = {
  headers?: map[string]string(name='headers'),
  statusCode?: int32(name='statusCode'),
  body?: InvokeShellCommandResponseBody(name='body'),
}

/**
 * @summary Runs interactive commands in a cluster node.
 *
 * @param request InvokeShellCommandRequest
 * @param runtime runtime options for this request RuntimeOptions
 * @return InvokeShellCommandResponse
 */
async function invokeShellCommandWithOptions(request: InvokeShellCommandRequest, runtime: $RuntimeOptions): InvokeShellCommandResponse {
  request.validate();
  var query = OpenApiUtil.query(request.toMap());
  var req = new OpenApiUtil.OpenApiRequest{ 
    query = OpenApiUtil.query(query),
  };
  var params = new OpenApiUtil.Params{
    action = 'InvokeShellCommand',
    version = '2018-04-12',
    protocol = 'HTTPS',
    pathname = '/',
    method = 'GET',
    authType = 'AK',
    style = 'RPC',
    reqBodyType = 'formData',
    bodyType = 'json',
  };
  return callApi(params, req, runtime);
}

/**
 * @summary Runs interactive commands in a cluster node.
 *
 * @param request InvokeShellCommandRequest
 * @return InvokeShellCommandResponse
 */
async function invokeShellCommand(request: InvokeShellCommandRequest): InvokeShellCommandResponse {
  var runtime = new $RuntimeOptions{};
  return invokeShellCommandWithOptions(request, runtime);
}

model ListAvailableEcsTypesRequest {
  instanceChargeType?: string(name='InstanceChargeType', description='The billing method of the ECS instances. Valid values:

*   PostPaid: pay-as-you-go
*   PrePaid: subscription', example='PostPaid'),
  showSoldOut?: boolean(name='ShowSoldOut', description='Specifies whether the ECS instances are sold out. Valid values:

*   false: available
*   true: sold out

Default value: false.', example='false'),
  spotStrategy?: string(name='SpotStrategy', description='The preemption policy of the ECS instances. Valid values:

*   NoSpot: The ECS instances are pay-as-you-go instances.
*   SpotWithPriceLimit: The ECS instances are preemptible instances that have a user-defined maximum hourly price.
*   SpotAsPriceGo: The compute nodes are preemptible instances for which the market price at the time of purchase is used as the bid price.', example='NoSpot'),
  zoneId?: string(name='ZoneId', description='The zone ID.', example='cn-hangzhou-b'),
}

model ListAvailableEcsTypesResponseBody = {
  instanceTypeFamilies?: {
    instanceTypeFamilyInfo?: [ 
    {
      generation?: string(name='Generation', description='The instance family.', example='ecs-3'),
      instanceTypeFamilyId?: string(name='InstanceTypeFamilyId', description='The ID of the instance family. For more information, see [Instance families](https://help.aliyun.com/document_detail/25378.html).', example='ecs.n4'),
      types?: {
        typesInfo?: [ 
        {
          cpuCoreCount?: int32(name='CpuCoreCount', description='The number of vCPUs.', example='4'),
          eniQuantity?: int32(name='EniQuantity', description='The maximum number of elastic network interfaces (ENIs) that can be bound to an ECS instance.', example='2'),
          GPUAmount?: int32(name='GPUAmount', description='The number of GPUs of an ECS instance.', example='2'),
          GPUSpec?: string(name='GPUSpec', description='The GPU type of the ECS instance.', example='NVIDIA V100'),
          instanceBandwidthRx?: int32(name='InstanceBandwidthRx', description='The maximum inbound internal bandwidth. Unit: Kbit/s.', example='10240000'),
          instanceBandwidthTx?: int32(name='InstanceBandwidthTx', description='The maximum outbound internal bandwidth. Unit: Kbit/s.', example='10240000'),
          instancePpsRx?: int32(name='InstancePpsRx', description='The inbound packet forwarding rate over the internal network. Unit: pps.', example='9000000'),
          instancePpsTx?: int32(name='InstancePpsTx', description='The outbound packet forwarding rate over the internal network. Unit: pps.', example='9000000'),
          instanceTypeId?: string(name='InstanceTypeId', description='The ID of the ECS instance type.', example='ecs.n4.xlarge'),
          memorySize?: int32(name='MemorySize', description='The memory size of the ECS instance. Unit: GiB.', example='8'),
          status?: string(name='Status', description='The status of the ECS instance. Valid values:

*   SoldOut
*   Available', example='Available'),
          zoneIds?: {
            zoneId?: [ string ](name='ZoneId')
          }(name='ZoneIds', description='The list of zone IDs.'),
        }
      ](name='TypesInfo')
      }(name='Types', description='The list of instance types.'),
    }
  ](name='InstanceTypeFamilyInfo')
  }(name='InstanceTypeFamilies', description='The instance family to which the instance type belongs.'),
  requestId?: string(name='RequestId', description='The request ID.', example='D9DD3AF8-1F91-4075-8669-55D10E45****'),
  supportSpotInstance?: boolean(name='SupportSpotInstance', description='Specifies whether preemptible instances are supported. Valid values:

*   false: not supported
*   true: supported', example='false'),
}

model ListAvailableEcsTypesResponse = {
  headers?: map[string]string(name='headers'),
  statusCode?: int32(name='statusCode'),
  body?: ListAvailableEcsTypesResponseBody(name='body'),
}

/**
 * @summary Queries available Elastic Compute Service (ECS) instance types.
 *
 * @param request ListAvailableEcsTypesRequest
 * @param runtime runtime options for this request RuntimeOptions
 * @return ListAvailableEcsTypesResponse
 */
async function listAvailableEcsTypesWithOptions(request: ListAvailableEcsTypesRequest, runtime: $RuntimeOptions): ListAvailableEcsTypesResponse {
  request.validate();
  var query = OpenApiUtil.query(request.toMap());
  var req = new OpenApiUtil.OpenApiRequest{ 
    query = OpenApiUtil.query(query),
  };
  var params = new OpenApiUtil.Params{
    action = 'ListAvailableEcsTypes',
    version = '2018-04-12',
    protocol = 'HTTPS',
    pathname = '/',
    method = 'GET',
    authType = 'AK',
    style = 'RPC',
    reqBodyType = 'formData',
    bodyType = 'json',
  };
  return callApi(params, req, runtime);
}

/**
 * @summary Queries available Elastic Compute Service (ECS) instance types.
 *
 * @param request ListAvailableEcsTypesRequest
 * @return ListAvailableEcsTypesResponse
 */
async function listAvailableEcsTypes(request: ListAvailableEcsTypesRequest): ListAvailableEcsTypesResponse {
  var runtime = new $RuntimeOptions{};
  return listAvailableEcsTypesWithOptions(request, runtime);
}

model ListCloudMetricProfilingsRequest {
  clusterId?: string(name='ClusterId', description='The cluster ID.

This parameter is required.', example='ehpc-hz-FYUr32****'),
  pageNumber?: int32(name='PageNumber', description='The page number.

Pages start from page 1.

Default value: 1.', example='1'),
  pageSize?: int32(name='PageSize', description='The number of entries per page. Valid values: 1 to 50.

Default value: 10.', example='10'),
  regionId?: string(name='RegionId', description='The region ID.', example='cn-hangzhou'),
}

model ListCloudMetricProfilingsResponseBody = {
  pageNumber?: int32(name='PageNumber', description='The page number.', example='1'),
  pageSize?: int32(name='PageSize', description='The number of entries per page.', example='1'),
  profilings?: {
    profilingInfo?: [ 
    {
      duration?: int32(name='Duration', description='The duration of the profiling process. Unit: seconds.

Valid values: 10 to 300.', example='30'),
      freq?: int32(name='Freq', description='The frequency of the profiling process. Unit: Hz.

Valid values: 1 to 2000', example='2000'),
      hostName?: string(name='HostName', description='The name of the host.', example='compute5'),
      instanceId?: string(name='InstanceId', description='The instance ID.', example='i-bp1j76z8dlukzqgl0****'),
      pid?: int32(name='Pid', description='The progress ID.', example='21687'),
      profilingId?: string(name='ProfilingId', description='The ID of the profiling process.', example='ehpc-hz-i-bplukzqgl****_21687_2019-09-09-02-37-40'),
      triggerTime?: string(name='TriggerTime', description='The time when the profiling was triggered.', example='2019-09-09 02:37:40'),
    }
  ](name='ProfilingInfo')
  }(name='Profilings', description='The profiling information of the cluster.'),
  requestId?: string(name='RequestId', description='The request ID.', example='9A05F620-ED46-4A57-95F1-C67D6D3C5DD2'),
  totalCount?: int32(name='TotalCount', description='The total number of entries returned.', example='1'),
}

model ListCloudMetricProfilingsResponse = {
  headers?: map[string]string(name='headers'),
  statusCode?: int32(name='statusCode'),
  body?: ListCloudMetricProfilingsResponseBody(name='body'),
}

/**
 * @summary Queries the profiling history of a cluster.
 *
 * @param request ListCloudMetricProfilingsRequest
 * @param runtime runtime options for this request RuntimeOptions
 * @return ListCloudMetricProfilingsResponse
 */
async function listCloudMetricProfilingsWithOptions(request: ListCloudMetricProfilingsRequest, runtime: $RuntimeOptions): ListCloudMetricProfilingsResponse {
  request.validate();
  var query = OpenApiUtil.query(request.toMap());
  var req = new OpenApiUtil.OpenApiRequest{ 
    query = OpenApiUtil.query(query),
  };
  var params = new OpenApiUtil.Params{
    action = 'ListCloudMetricProfilings',
    version = '2018-04-12',
    protocol = 'HTTPS',
    pathname = '/',
    method = 'GET',
    authType = 'AK',
    style = 'RPC',
    reqBodyType = 'formData',
    bodyType = 'json',
  };
  return callApi(params, req, runtime);
}

/**
 * @summary Queries the profiling history of a cluster.
 *
 * @param request ListCloudMetricProfilingsRequest
 * @return ListCloudMetricProfilingsResponse
 */
async function listCloudMetricProfilings(request: ListCloudMetricProfilingsRequest): ListCloudMetricProfilingsResponse {
  var runtime = new $RuntimeOptions{};
  return listCloudMetricProfilingsWithOptions(request, runtime);
}

model ListClusterLogsRequest {
  clusterId?: string(name='ClusterId', description='The cluster ID.

You can call the [ListClusters](https://help.aliyun.com/document_detail/87116.html) operation to query the cluster ID.

This parameter is required.', example='ehpc-hz-FYUr32****'),
  pageNumber?: int32(name='PageNumber', description='The page number. Pages start from page 1.', example='1'),
  pageSize?: int32(name='PageSize', description='The number of entries per page. Valid values: 1 to 100.

Default value: 10', example='10'),
}

model ListClusterLogsResponseBody = {
  clusterId?: string(name='ClusterId', description='The cluster ID.', example='ehpc-hz-FYUr32****'),
  logs?: {
    logInfo?: [ 
    {
      createTime?: string(name='CreateTime', description='The time when the log was created.', example='2019-09-18T13:24:13.000'),
      level?: string(name='Level', description='The level of the log entry. Valid values:

*   warn
*   error
*   info', example='info'),
      message?: string(name='Message', description='The content of the log.', example='Begin to create cluster'),
      operation?: string(name='Operation', description='The type of the operation. Valid values:

*   CreateCluster
*   StartCluster
*   StopCluster
*   DeleteCluster
*   AddNodes
*   StartNodes
*   ResetNodes
*   StopNodes
*   DeleteNodes', example='CreateCluster'),
    }
  ](name='LogInfo')
  }(name='Logs', description='The queried operations logs.'),
  pageNumber?: int32(name='PageNumber', description='The page number.', example='1'),
  pageSize?: int32(name='PageSize', description='The number of entries per page.', example='1'),
  requestId?: string(name='RequestId', description='The request ID.', example='BBC2F93D-003A-49C4-850C-B826EECF6667'),
  totalCount?: int32(name='TotalCount', description='The total number of entries returned.', example='2'),
}

model ListClusterLogsResponse = {
  headers?: map[string]string(name='headers'),
  statusCode?: int32(name='statusCode'),
  body?: ListClusterLogsResponseBody(name='body'),
}

/**
 * @summary Queries the operation logs of a cluster within the last three days.
 *
 * @param request ListClusterLogsRequest
 * @param runtime runtime options for this request RuntimeOptions
 * @return ListClusterLogsResponse
 */
async function listClusterLogsWithOptions(request: ListClusterLogsRequest, runtime: $RuntimeOptions): ListClusterLogsResponse {
  request.validate();
  var query = OpenApiUtil.query(request.toMap());
  var req = new OpenApiUtil.OpenApiRequest{ 
    query = OpenApiUtil.query(query),
  };
  var params = new OpenApiUtil.Params{
    action = 'ListClusterLogs',
    version = '2018-04-12',
    protocol = 'HTTPS',
    pathname = '/',
    method = 'GET',
    authType = 'AK',
    style = 'RPC',
    reqBodyType = 'formData',
    bodyType = 'json',
  };
  return callApi(params, req, runtime);
}

/**
 * @summary Queries the operation logs of a cluster within the last three days.
 *
 * @param request ListClusterLogsRequest
 * @return ListClusterLogsResponse
 */
async function listClusterLogs(request: ListClusterLogsRequest): ListClusterLogsResponse {
  var runtime = new $RuntimeOptions{};
  return listClusterLogsWithOptions(request, runtime);
}

model ListClustersRequest {
  pageNumber?: int32(name='PageNumber', description='The number of the page to return. Pages start from page 1.', example='1'),
  pageSize?: int32(name='PageSize', description='The number of entries to return on each page. Valid values: 1 to 50.

Default value: 10', example='10'),
}

model ListClustersResponseBody = {
  clusters?: {
    clusterInfoSimple?: [ 
    {
      accountType?: string(name='AccountType', description='The server type of the account. Valid values:

*   nis
*   ldap', example='nis'),
      baseOsTag?: string(name='BaseOsTag', description='The operating system tag of the base image. The tag was used only by the management node.', example='CentOS_7.2_64'),
      clientVersion?: string(name='ClientVersion', description='The version of the client.', example='1.0.64'),
      computeSpotPriceLimit?: float(name='ComputeSpotPriceLimit', description='The maximum hourly price for the ECS instance under the compute node. The return value can be accurate to three decimal places.', example='0.034'),
      computeSpotStrategy?: string(name='ComputeSpotStrategy', description='The bidding method of the compute nodes. Valid values:

*   NoSpot: The instances of the compute node are pay-as-you-go instances.
*   SpotWithPriceLimit: The instances of the compute node are preemptible instances. These types of instances have a specified maximum hourly price.
*   SpotAsPriceGo: The instances of the compute node are preemptible instances. The price of these instances is based on the current market price.', example='NoSpot'),
      computes?: {
        exceptionCount?: int32(name='ExceptionCount', description='The number of abnormal nodes.', example='0'),
        normalCount?: int32(name='NormalCount', description='The number of normal nodes.', example='1'),
        operatingCount?: int32(name='OperatingCount', description='The number of nodes that are being used in the queue. This includes those that are being initialized, installed, or released.', example='1'),
        stoppedCount?: int32(name='StoppedCount', description='The number of stopped nodes.', example='0'),
        total?: int32(name='Total', description='The total number of nodes.', example='2'),
      }(name='Computes', description='The information about compute nodes.'),
      count?: int32(name='Count', description='The number of compute nodes in the cluster.', example='3'),
      createTime?: string(name='CreateTime', description='The time when the instance was created.', example='2020-10-30T07:39:20.000Z'),
      deployMode?: string(name='DeployMode', description='The mode in which the cluster was deployed. Valid values:

*   Standard: An account node, a scheduling node, a logon node, and multiple compute nodes are separately deployed.
*   Advanced: Two high availability (HA) account nodes, two HA scheduler nodes, one logon node, and multiple compute nodes are separately deployed.
*   Simple: A management node, a logon node, and multiple compute nodes are deployed. The management node consists of an account node and a scheduling node. The logon node and compute nodes are separately deployed.
*   Tiny: A management node and multiple compute nodes are deployed. The management node consists of an account node, a scheduling node, and a logon node. The compute nodes are separately deployed.', example='Standard'),
      description?: string(name='Description', description='The description of the cluster.', example='clusterdescription'),
      ehpcVersion?: string(name='EhpcVersion', description='The version of E-HPC.', example='1.0.0'),
      hasPlugin?: boolean(name='HasPlugin', description='Indicates whether plug-ins were used in the cluster. Valid values:

*   true: Plug-ins are used.
*   false: Plug-ins are not used.

Default value: false', example='false'),
      id?: string(name='Id', description='The ID of the cluster.', example='ehpc-hz-jeJki6****'),
      imageId?: string(name='ImageId', description='The ID of the image.', example='wi_1607_x64_dtc_zh_40G_alibase****'),
      imageOwnerAlias?: string(name='ImageOwnerAlias', description='The type of the image. Valid values:

*   system: public image
*   self: custom image
*   others: shared image
*   marketplace: Alibaba Cloud Marketplace image', example='system'),
      instanceChargeType?: string(name='InstanceChargeType', description='The billing method of the nodes in the cluster. Valid values:

*   PostPaid: pay-as-you-go
*   PrePaid: subscription', example='PostPaid'),
      instanceType?: string(name='InstanceType', description='The instance type of the compute nodes.', example='ecs.n1.tiny'),
      isComputeEss?: boolean(name='IsComputeEss', description='Indicates whether a scaling group was enabled. Valid values:

*   true: A scaling group is enabled.
*   false: No scaling group is enabled.', example='false'),
      location?: string(name='Location', description='The location where the cluster was deployed. Valid values:

*   OnPremise: The cluster is deployed on a hybrid cloud.
*   PublicCloud: The cluster is deployed on a public cloud.', example='PublicCloud'),
      loginNodes?: string(name='LoginNodes', description='The list of logon nodes.', example='{"Id": "i-bp13x4is8pvdhws7e****"}'),
      managers?: {
        exceptionCount?: int32(name='ExceptionCount', description='The number of abnormal nodes.', example='0'),
        normalCount?: int32(name='NormalCount', description='The number of normal nodes.', example='1'),
        operatingCount?: int32(name='OperatingCount', description='The number of nodes that are being used in the queue. This includes those that are being initialized, installed, or released.', example='1'),
        stoppedCount?: int32(name='StoppedCount', description='The number of stopped nodes.', example='0'),
        total?: int32(name='Total', description='The total number of management nodes.', example='2'),
      }(name='Managers', description='The list of management nodes.'),
      name?: string(name='Name', description='The name of the cluster.', example='test'),
      nodePrefix?: string(name='NodePrefix', description='The prefix of the node.', example='test'),
      nodeSuffix?: string(name='NodeSuffix', description='The suffix of the node.', example='name'),
      osTag?: string(name='OsTag', description='The operating system tag of the image.', example='CentOS_7.2_64'),
      regionId?: string(name='RegionId', description='The ID of the region.', example='cn-hangzhou'),
      resourceGroupId?: string(name='ResourceGroupId', description='The resource group ID.You can call the ListResourceGroups operation to query the IDs of resource groups.', example='rg-acfmxazb4ph****'),
      schedulerType?: string(name='SchedulerType', description='The type of the scheduler. Valid values:

*   pbs
*   slurm
*   opengridscheduler
*   deadline', example='pbs'),
      status?: string(name='Status', description='The status of the cluster. Valid values:

*   uninit: The cluster is not initialized.
*   creating: The cluster is being created.
*   init: The cluster is being initialized.
*   running: The cluster is running.
*   exception: The cluster encounters an exception.
*   releasing: The cluster is being released.', example='running'),
      totalResources?: {
        cpu?: int32(name='Cpu', description='The number of CPU cores. Unit: cores.', example='1'),
        gpu?: int32(name='Gpu', description='The number of GPU cards. Unit: cards.', example='0'),
        memory?: int32(name='Memory', description='The memory size. Unit: MiB.', example='1024'),
      }(name='TotalResources', description='The statistics of all resources in the cluster.'),
      usedResources?: {
        cpu?: int32(name='Cpu', description='The number of CPU cores. Unit: cores.', example='1'),
        gpu?: int32(name='Gpu', description='The number of GPU cards. Unit: cards.', example='0'),
        memory?: int32(name='Memory', description='The memory size. Unit: MiB.', example='1024'),
      }(name='UsedResources', description='The number of consumed resources in the cluster.'),
      vSwitchId?: string(name='VSwitchId', description='The ID of the vSwitch.', example='vsw-bp1lfcjbfb099rrjn****'),
      vpcId?: string(name='VpcId', description='The ID of the virtual private cloud (VPC).', example='vpc-b3f3edefefeep0760yju****'),
      zoneId?: string(name='ZoneId', description='The ID of the zone.', example='cn-hangzhou-c'),
    }
  ](name='ClusterInfoSimple')
  }(name='Clusters', description='The list of clusters.'),
  pageNumber?: int32(name='PageNumber', description='The number of the returned page.', example='1'),
  pageSize?: int32(name='PageSize', description='The number of entries returned per page.', example='1'),
  requestId?: string(name='RequestId', description='The ID of the request.', example='04F0F334-1335-436C-A1D7-6C044FE73368'),
  totalCount?: int32(name='TotalCount', description='The total number of returned entries.', example='1'),
}

model ListClustersResponse = {
  headers?: map[string]string(name='headers'),
  statusCode?: int32(name='statusCode'),
  body?: ListClustersResponseBody(name='body'),
}

/**
 * @summary Queries the list of clusters in all regions within an account.
 *
 * @param request ListClustersRequest
 * @param runtime runtime options for this request RuntimeOptions
 * @return ListClustersResponse
 */
async function listClustersWithOptions(request: ListClustersRequest, runtime: $RuntimeOptions): ListClustersResponse {
  request.validate();
  var query = OpenApiUtil.query(request.toMap());
  var req = new OpenApiUtil.OpenApiRequest{ 
    query = OpenApiUtil.query(query),
  };
  var params = new OpenApiUtil.Params{
    action = 'ListClusters',
    version = '2018-04-12',
    protocol = 'HTTPS',
    pathname = '/',
    method = 'GET',
    authType = 'AK',
    style = 'RPC',
    reqBodyType = 'formData',
    bodyType = 'json',
  };
  return callApi(params, req, runtime);
}

/**
 * @summary Queries the list of clusters in all regions within an account.
 *
 * @param request ListClustersRequest
 * @return ListClustersResponse
 */
async function listClusters(request: ListClustersRequest): ListClustersResponse {
  var runtime = new $RuntimeOptions{};
  return listClustersWithOptions(request, runtime);
}

model ListClustersMetaRequest {
  pageNumber?: int32(name='PageNumber', description='The number of the page to return. Pages start from page 1.', example='1'),
  pageSize?: int32(name='PageSize', description='The number of entries to return on each page. Valid values: 1 to 50.

Default value: 10', example='10'),
}

model ListClustersMetaResponseBody = {
  clusters?: {
    clusterInfoSimple?: [ 
    {
      accountType?: string(name='AccountType', description='The server type of the account. Valid values:

*   nis
*   ldap', example='nis'),
      clientVersion?: string(name='ClientVersion', description='The version of the client.', example='1.0.64'),
      deployMode?: string(name='DeployMode', description='The mode in which the cluster is deployed. Valid values:

*   Standard: An account node, a scheduling node, a logon node, and multiple compute nodes are separately deployed.
*   Advanced: Two high availability (HA) account nodes, two HA scheduler nodes, one logon node, and multiple compute nodes are separately deployed.
*   Simple: A management node, a logon node, and multiple compute nodes are deployed. The management node consists of an account node and a scheduling node. The logon node and compute nodes are separately deployed.
*   Tiny: A management node and multiple compute nodes are deployed. The management node consists of an account node, a scheduling node, and a logon node. The compute nodes are separately deployed.', example='Standard'),
      description?: string(name='Description', description='The description of the cluster.', example='clusterdescription'),
      ehpcVersion?: string(name='EhpcVersion', description='The version of E-HPC.', example='1.0.0'),
      hasPlugin?: boolean(name='HasPlugin', description='Indicates whether the cluster uses a plug-in. Valid values:

*   true
*   false

Default value: false', example='false'),
      id?: string(name='Id', description='The ID of the cluster.', example='ehpc-hz-jeJki6****'),
      isComputeEss?: boolean(name='IsComputeEss', description='Indicates whether a scaling group is enabled. Valid values:

*   true: A scaling group is enabled.
*   false: No scaling group is enabled.', example='false'),
      location?: string(name='Location', description='The location where the cluster is deployed. Valid values:

*   OnPremise: The cluster is deployed on a hybrid cloud.
*   PublicCloud: The cluster is deployed on a public cloud.', example='PublicCloud'),
      name?: string(name='Name', description='The name of the cluster.', example='cluster1'),
      osTag?: string(name='OsTag', description='The image tag of the operating system.', example='CentOS_7.2_64'),
      schedulerType?: string(name='SchedulerType', description='The type of the scheduler. Valid values:

*   pbs
*   slurm
*   opengridscheduler
*   deadline', example='pbs'),
      status?: string(name='Status', description='The status of the cluster. Valid values:

*   uninit: The cluster is not initialized.
*   creating: The cluster is being created.
*   init: The cluster is being initialized.
*   running: The cluster is running.
*   exception: The cluster encounters an exception.
*   releasing: The cluster is being released.', example='running'),
      vpcId?: string(name='VpcId', description='The ID of the virtual private cloud (VPC).', example='vpc-b3f3edefefeep0760yju****'),
    }
  ](name='ClusterInfoSimple')
  }(name='Clusters', description='The list of clusters.'),
  pageNumber?: int32(name='PageNumber', description='The number of the returned page.', example='1'),
  pageSize?: int32(name='PageSize', description='The number of entries returned per page. Valid values: 1 to 50.', example='10'),
  requestId?: string(name='RequestId', description='The ID of the request.', example='DD517102-B314-4665-BDAC-A32DE7834D02'),
  totalCount?: int32(name='TotalCount', description='The total number of returned entries.', example='1'),
}

model ListClustersMetaResponse = {
  headers?: map[string]string(name='headers'),
  statusCode?: int32(name='statusCode'),
  body?: ListClustersMetaResponseBody(name='body'),
}

/**
 * @summary Queries the list of cluster metadata.
 *
 * @param request ListClustersMetaRequest
 * @param runtime runtime options for this request RuntimeOptions
 * @return ListClustersMetaResponse
 */
async function listClustersMetaWithOptions(request: ListClustersMetaRequest, runtime: $RuntimeOptions): ListClustersMetaResponse {
  request.validate();
  var query = OpenApiUtil.query(request.toMap());
  var req = new OpenApiUtil.OpenApiRequest{ 
    query = OpenApiUtil.query(query),
  };
  var params = new OpenApiUtil.Params{
    action = 'ListClustersMeta',
    version = '2018-04-12',
    protocol = 'HTTPS',
    pathname = '/',
    method = 'GET',
    authType = 'AK',
    style = 'RPC',
    reqBodyType = 'formData',
    bodyType = 'json',
  };
  return callApi(params, req, runtime);
}

/**
 * @summary Queries the list of cluster metadata.
 *
 * @param request ListClustersMetaRequest
 * @return ListClustersMetaResponse
 */
async function listClustersMeta(request: ListClustersMetaRequest): ListClustersMetaResponse {
  var runtime = new $RuntimeOptions{};
  return listClustersMetaWithOptions(request, runtime);
}

model ListCommandsRequest {
  clusterId?: string(name='ClusterId', description='The cluster ID.

You can call the [ListClusters](https://help.aliyun.com/document_detail/87116.html) operation to query the cluster ID.

This parameter is required.', example='ehpc-hz-FYUr32****'),
  commandId?: string(name='CommandId', description='The ID of the command.', example='c-hz01v8vudql****'),
  pageNumber?: int32(name='PageNumber', description='The page number of the page to return.

Page number starts from page 1.

Default value: 1.', example='1'),
  pageSize?: int32(name='PageSize', description='The number of entries to return on each page.\\\\
Valid values: 1 to 50.\\\\
Default value: 10.', example='10'),
}

model ListCommandsResponseBody = {
  commands?: {
    command?: [ 
    {
      commandContent?: string(name='CommandContent', description='The content of the command.', example='echo "hello world"'),
      commandId?: string(name='CommandId', description='The ID of the command.', example='c-hz01v8vudql****'),
      timeout?: string(name='Timeout', description='The timeout period. Unit: seconds.', example='60'),
      workingDir?: string(name='WorkingDir', description='The working directory of the command.', example='/home'),
    }
  ](name='Command')
  }(name='Commands', description='The list of commands.'),
  pageNumber?: int32(name='PageNumber', description='The page number of the returned page.', example='1'),
  pageSize?: int32(name='PageSize', description='The number of entries returned per page.', example='10'),
  requestId?: string(name='RequestId', description='The ID of the request.', example='04F0F334-1335-436C-A1D7-6C044FE7****'),
  totalCount?: int32(name='TotalCount', description='The total number of returned entries.', example='1'),
}

model ListCommandsResponse = {
  headers?: map[string]string(name='headers'),
  statusCode?: int32(name='statusCode'),
  body?: ListCommandsResponseBody(name='body'),
}

/**
 * @summary Queries the interactive commands in a specified cluster.
 *
 * @param request ListCommandsRequest
 * @param runtime runtime options for this request RuntimeOptions
 * @return ListCommandsResponse
 */
async function listCommandsWithOptions(request: ListCommandsRequest, runtime: $RuntimeOptions): ListCommandsResponse {
  request.validate();
  var query = OpenApiUtil.query(request.toMap());
  var req = new OpenApiUtil.OpenApiRequest{ 
    query = OpenApiUtil.query(query),
  };
  var params = new OpenApiUtil.Params{
    action = 'ListCommands',
    version = '2018-04-12',
    protocol = 'HTTPS',
    pathname = '/',
    method = 'GET',
    authType = 'AK',
    style = 'RPC',
    reqBodyType = 'formData',
    bodyType = 'json',
  };
  return callApi(params, req, runtime);
}

/**
 * @summary Queries the interactive commands in a specified cluster.
 *
 * @param request ListCommandsRequest
 * @return ListCommandsResponse
 */
async function listCommands(request: ListCommandsRequest): ListCommandsResponse {
  var runtime = new $RuntimeOptions{};
  return listCommandsWithOptions(request, runtime);
}

model ListCommunityImagesRequest {
  baseOsTag?: string(name='BaseOsTag', description='The tag of the base operating system (BOS).', example='CentOS_7.2_64'),
  clusterId?: string(name='ClusterId', description='The ID of the cluster. If the cluster supports multiple operating systems, all community images in the region where the cluster resides are queried.

If you do not specify the cluster ID, the community images that are supported by all clusters are queried.', example='ehpc-hz-FYUr32****'),
  instanceType?: string(name='InstanceType', description='The type of the Elastic Compute Service (ECS) instance. If you do not specify the instance type, the community images that are supported by all instance types are queried.', example='ecs.n1.tiny'),
}

model ListCommunityImagesResponseBody = {
  images?: {
    imageInfo?: [ 
    {
      baseOsTag?: {
        architecture?: string(name='Architecture', description='The architecture of the operating system. Valid values:

*   i386
*   x86_64', example='x86_64'),
        osTag?: string(name='OsTag', description='The operating system tag of the image.', example='CentOS_7.2_64'),
        platform?: string(name='Platform', description='The distribution of the operating system. Valid values:

*   CentOS
*   Ubuntu
*   SUSE
*   OpenSUSE
*   Debian
*   CoreOS
*   Aliyun
*   Windows Server 2003
*   Windows Server 2008
*   Windows Server 2012
*   Others Linux
*   Customized Linux', example='CentOS'),
        version?: string(name='Version', description='The version of the operating system.', example='7.2'),
      }(name='BaseOsTag', description='The tag of the BOS image.'),
      description?: string(name='Description', description='The description of the image.', example='ExampleDescription'),
      imageId?: string(name='ImageId', description='The image ID.', example='m-bp181x855551ww5yq****'),
      imageName?: string(name='ImageName', description='The image name.', example='linux_CentOS7.2_OceanBase_OBD_1ECS-3OB_3.0'),
      imageOwnerAlias?: string(name='ImageOwnerAlias', description='The image type. Valid values:

*   self: custom image
*   others: shared image', example='self'),
      osTag?: {
        architecture?: string(name='Architecture', description='The architecture of the operating system. Valid values:

*   i386
*   x86_64', example='x86_64'),
        baseOsTag?: string(name='BaseOsTag', description='The tag of the BOS image.', example='CentOS_7.2_64'),
        osTag?: string(name='OsTag', description='The operating system tag of the image.', example='CentOS_7.2_64'),
        platform?: string(name='Platform', description='The OS.', example='CentOS'),
        version?: string(name='Version', description='The version of the operating system.', example='7.2'),
      }(name='OsTag', description='An array of OS images that are supported by E-HPC.'),
      postInstallScript?: string(name='PostInstallScript', description='The script that is run after the image is installed.', example='example.sh'),
      pricingCycle?: string(name='PricingCycle', description='The billing unit of the image. Valid values:

*   Hour
*   Month
*   Year', example='Month'),
      productCode?: string(name='ProductCode', description='The product code in Alibaba Cloud Marketplace.', example='cmjj028279'),
      size?: int32(name='Size', description='The size of the image. Unit: GiB.', example='40'),
      skuCode?: string(name='SkuCode', description='The stock keeping unit (SKU) of the image. Valid values:

*   ECS: pay-as-you-go
*   package: subscription', example='ECS'),
      status?: string(name='Status', description='The state of the image. Valid values:

*   UnAvailable
*   Available
*   Creating
*   CreateFailed', example='Available'),
      uid?: string(name='Uid', description='The owner of the image.', example='127****'),
    }
  ](name='ImageInfo')
  }(name='Images', description='The list of custom images and shared images that are supported by the E-HPC.'),
  requestId?: string(name='RequestId', description='The request ID.', example='04F0F334-1335-436C-A1D7-6C044FE73368'),
}

model ListCommunityImagesResponse = {
  headers?: map[string]string(name='headers'),
  statusCode?: int32(name='statusCode'),
  body?: ListCommunityImagesResponseBody(name='body'),
}

/**
 * @summary Queries a list of community images.
 *
 * @param request ListCommunityImagesRequest
 * @param runtime runtime options for this request RuntimeOptions
 * @return ListCommunityImagesResponse
 */
async function listCommunityImagesWithOptions(request: ListCommunityImagesRequest, runtime: $RuntimeOptions): ListCommunityImagesResponse {
  request.validate();
  var query = OpenApiUtil.query(request.toMap());
  var req = new OpenApiUtil.OpenApiRequest{ 
    query = OpenApiUtil.query(query),
  };
  var params = new OpenApiUtil.Params{
    action = 'ListCommunityImages',
    version = '2018-04-12',
    protocol = 'HTTPS',
    pathname = '/',
    method = 'GET',
    authType = 'AK',
    style = 'RPC',
    reqBodyType = 'formData',
    bodyType = 'json',
  };
  return callApi(params, req, runtime);
}

/**
 * @summary Queries a list of community images.
 *
 * @param request ListCommunityImagesRequest
 * @return ListCommunityImagesResponse
 */
async function listCommunityImages(request: ListCommunityImagesRequest): ListCommunityImagesResponse {
  var runtime = new $RuntimeOptions{};
  return listCommunityImagesWithOptions(request, runtime);
}

model ListCpfsFileSystemsRequest {
  fileSystemId?: string(name='FileSystemId', description='The ID of the file system.

By default, the information about all CPFSs and their mount targets within your account are queried.', example='096751****'),
  pageNumber?: int32(name='PageNumber', description='The page number of the page to return.

Pages start from page 1.

Default value: 1.', example='1'),
  pageSize?: int32(name='PageSize', description='The number of entries to return on each page. Valid values: 1 to 50.

Default value: 10.', example='10'),
}

model ListCpfsFileSystemsResponseBody = {
  fileSystemList?: {
    fileSystems?: [ 
    {
      capacity?: string(name='Capacity', description='The capacity of the file system. Unit: GiB', example='5120'),
      createTime?: string(name='CreateTime', description='The time when the file system was created.', example='2018-07-26 16:36:27'),
      destription?: string(name='Destription', description='The description of the file system.', example='FilsDestription'),
      fileSystemId?: string(name='FileSystemId', description='The ID of the file system.', example='096751****'),
      mountTargetList?: {
        mountTargets?: [ 
        {
          mountTargetDomain?: string(name='MountTargetDomain', description='The domain in which the mount target resides.', example='c0967****.cn-hangzhou.cpfs.nas.aliyuncs.com'),
          networkType?: string(name='NetworkType', description='The network type.', example='VPC'),
          status?: string(name='Status', description='The status of the mount target. Valid values:

*   Active: The mount target is available.
*   Inactive: The mount target is unavailable.
*   Pending: The mount target is being mounted.
*   Deleting: The mount target is being deleted.', example='Active'),
          vpcId?: string(name='VpcId', description='The ID of the virtual private cloud (VPC).', example='vpc-8vbvb34rtyh6xb3zrehs1****'),
          vswId?: string(name='VswId', description='The vSwitch ID.', example='vsw-8vb34rtyh6xb3zrehs1****'),
        }
      ](name='MountTargets')
      }(name='MountTargetList', description='The mount targets of the file systems.'),
      protocolType?: string(name='ProtocolType', description='The protocol type that is applied to the mounted file system. Valid values:

*   NFS
*   SMB', example='NFS'),
      regionId?: string(name='RegionId', description='The region ID.', example='cn-hangzhou'),
      zoneId?: string(name='ZoneId', description='The zone ID.', example='cn-hangzhou-b'),
    }
  ](name='FileSystems')
  }(name='FileSystemList', description='The queried file systems.'),
  pageNumber?: int32(name='PageNumber', description='The page number.', example='1'),
  pageSize?: int32(name='PageSize', description='The number of entries per page.', example='10'),
  requestId?: string(name='RequestId', description='The request ID.', example='2B900AFE-C938-4551-86E9-97E231BBC876'),
  totalCount?: int32(name='TotalCount', description='The total number of entries returned.', example='10'),
}

model ListCpfsFileSystemsResponse = {
  headers?: map[string]string(name='headers'),
  statusCode?: int32(name='statusCode'),
  body?: ListCpfsFileSystemsResponseBody(name='body'),
}

/**
 * @summary Queries the information about Cloud Paralleled File System (CPFS) and its mount targets.
 *
 * @param request ListCpfsFileSystemsRequest
 * @param runtime runtime options for this request RuntimeOptions
 * @return ListCpfsFileSystemsResponse
 */
async function listCpfsFileSystemsWithOptions(request: ListCpfsFileSystemsRequest, runtime: $RuntimeOptions): ListCpfsFileSystemsResponse {
  request.validate();
  var query = OpenApiUtil.query(request.toMap());
  var req = new OpenApiUtil.OpenApiRequest{ 
    query = OpenApiUtil.query(query),
  };
  var params = new OpenApiUtil.Params{
    action = 'ListCpfsFileSystems',
    version = '2018-04-12',
    protocol = 'HTTPS',
    pathname = '/',
    method = 'GET',
    authType = 'AK',
    style = 'RPC',
    reqBodyType = 'formData',
    bodyType = 'json',
  };
  return callApi(params, req, runtime);
}

/**
 * @summary Queries the information about Cloud Paralleled File System (CPFS) and its mount targets.
 *
 * @param request ListCpfsFileSystemsRequest
 * @return ListCpfsFileSystemsResponse
 */
async function listCpfsFileSystems(request: ListCpfsFileSystemsRequest): ListCpfsFileSystemsResponse {
  var runtime = new $RuntimeOptions{};
  return listCpfsFileSystemsWithOptions(request, runtime);
}

model ListCurrentClientVersionResponseBody = {
  clientVersion?: string(name='ClientVersion', description='The latest version number of ehpcutil.', example='1.1.1'),
  requestId?: string(name='RequestId', description='The request ID.', example='04F0F334-1335-436C-A1D7-6C044FE73368'),
}

model ListCurrentClientVersionResponse = {
  headers?: map[string]string(name='headers'),
  statusCode?: int32(name='statusCode'),
  body?: ListCurrentClientVersionResponseBody(name='body'),
}

/**
 * @summary Query the latest version number of the cluster client (ehpcutil).
 *
 * @param request ListCurrentClientVersionRequest
 * @param runtime runtime options for this request RuntimeOptions
 * @return ListCurrentClientVersionResponse
 */
async function listCurrentClientVersionWithOptions(runtime: $RuntimeOptions): ListCurrentClientVersionResponse {
  var req = new OpenApiUtil.OpenApiRequest{};
  var params = new OpenApiUtil.Params{
    action = 'ListCurrentClientVersion',
    version = '2018-04-12',
    protocol = 'HTTPS',
    pathname = '/',
    method = 'GET',
    authType = 'AK',
    style = 'RPC',
    reqBodyType = 'formData',
    bodyType = 'json',
  };
  return callApi(params, req, runtime);
}

/**
 * @summary Query the latest version number of the cluster client (ehpcutil).
 *
 * @return ListCurrentClientVersionResponse
 */
async function listCurrentClientVersion(): ListCurrentClientVersionResponse {
  var runtime = new $RuntimeOptions{};
  return listCurrentClientVersionWithOptions(runtime);
}

model ListCustomImagesRequest {
  baseOsTag?: string(name='BaseOsTag', description='The image tag of the operating system. The tag is used only for management nodes.', example='CentOS_7.2_64'),
  clusterId?: string(name='ClusterId', description='The cluster ID.

*   If you specify a value for this parameter, all community images in the region where the cluster resides are queried.
*   If you do not specify a value for this parameter, the community images that are supported by all clusters are queried.', example='ehpc-hz-FYUr32****'),
  imageOwnerAlias?: string(name='ImageOwnerAlias', description='The image source. Valid values:

*   self: custom image
*   others: shared image', example='self'),
  instanceType?: string(name='InstanceType', description='The instance type of the Elastic Compute Service (ECS) instance. If you do not specify the instance type, the community images that are supported by all instance types are queried.', example='ecs.n1.tiny'),
}

model ListCustomImagesResponseBody = {
  images?: {
    imageInfo?: [ 
    {
      baseOsTag?: {
        architecture?: string(name='Architecture', description='The architecture of the operating system. Valid values:

*   i386
*   x86_64', example='i386'),
        osTag?: string(name='OsTag', description='The tags of the image.', example='CentOS_7.2_64'),
        platform?: string(name='Platform', description='The OS. Valid values:

*   CentOS
*   windows', example='CentOS'),
        version?: string(name='Version', description='The version of the operating system.', example='7.2'),
      }(name='BaseOsTag', description='The image tag of the operating system.'),
      description?: string(name='Description', description='The description of the image.', example='ExampleDescription'),
      imageId?: string(name='ImageId', description='The image ID.', example='m-bp181x855551ww5yq****'),
      imageName?: string(name='ImageName', description='The name of the image.', example='CHESS5V5.0.27'),
      imageOwnerAlias?: string(name='ImageOwnerAlias', description='The type of the image. Valid values:

*   self: custom image
*   others: shared image', example='self'),
      osTag?: {
        architecture?: string(name='Architecture', description='The architecture of the operating system. Valid values:

*   i386
*   x86_64', example='x86_64'),
        baseOsTag?: string(name='BaseOsTag', description='The image tag of the operating system.', example='CentOS_7.2_64'),
        osTag?: string(name='OsTag', description='The tag of the image.', example='CentOS_7.2_64'),
        platform?: string(name='Platform', description='The OS.', example='CentOS'),
        version?: string(name='Version', description='The version of the operating system.', example='7.2'),
      }(name='OsTag', description='An array of system images that are supported by E-HPC.'),
      postInstallScript?: string(name='PostInstallScript', description='>  This parameter is not publicly available.', example='example.sh'),
      pricingCycle?: string(name='PricingCycle', description='>  This parameter is not publicly available.', example='Month'),
      productCode?: string(name='ProductCode', description='>  This parameter is not publicly available.', example='cmjj028279'),
      size?: int32(name='Size', description='The size of the image. Unit: GiB.', example='40'),
      skuCode?: string(name='SkuCode', description='>  This parameter is not publicly available.', example='ECS'),
      status?: string(name='Status', description='>  This parameter is not publicly available.', example='Available'),
      uid?: string(name='Uid', description='>  This parameter is not publicly available.', example='127****'),
    }
  ](name='ImageInfo')
  }(name='Images', description='The list of community images, including custom images and shared images.'),
  requestId?: string(name='RequestId', description='The request ID.', example='04F0F334-1335-436C-A1D7-6C044FE73368'),
}

model ListCustomImagesResponse = {
  headers?: map[string]string(name='headers'),
  statusCode?: int32(name='statusCode'),
  body?: ListCustomImagesResponseBody(name='body'),
}

/**
 * @summary Queries custom images and shared images supported by Elastic High Performance Computing (E-HPC).
 *
 * @param request ListCustomImagesRequest
 * @param runtime runtime options for this request RuntimeOptions
 * @return ListCustomImagesResponse
 */
async function listCustomImagesWithOptions(request: ListCustomImagesRequest, runtime: $RuntimeOptions): ListCustomImagesResponse {
  request.validate();
  var query = OpenApiUtil.query(request.toMap());
  var req = new OpenApiUtil.OpenApiRequest{ 
    query = OpenApiUtil.query(query),
  };
  var params = new OpenApiUtil.Params{
    action = 'ListCustomImages',
    version = '2018-04-12',
    protocol = 'HTTPS',
    pathname = '/',
    method = 'GET',
    authType = 'AK',
    style = 'RPC',
    reqBodyType = 'formData',
    bodyType = 'json',
  };
  return callApi(params, req, runtime);
}

/**
 * @summary Queries custom images and shared images supported by Elastic High Performance Computing (E-HPC).
 *
 * @param request ListCustomImagesRequest
 * @return ListCustomImagesResponse
 */
async function listCustomImages(request: ListCustomImagesRequest): ListCustomImagesResponse {
  var runtime = new $RuntimeOptions{};
  return listCustomImagesWithOptions(request, runtime);
}

model ListFileSystemWithMountTargetsRequest {
  pageNumber?: int32(name='PageNumber', description='The page number.', example='1'),
  pageSize?: int32(name='PageSize', description='The number of entries to return on each page. Valid values: 1 to 50. Default value: 10.', example='10'),
}

model ListFileSystemWithMountTargetsResponseBody = {
  fileSystemList?: {
    fileSystems?: [ 
    {
      bandWidth?: int32(name='BandWidth', description='The bandwidth of the file system. Unit: Mbit/s.', example='150'),
      capacity?: int32(name='Capacity', description='The capacity of the file system. Unit: GiB.', example='5120'),
      createTime?: string(name='CreateTime', description='The time when the file system was created.', example='2018-07-26 16:36:27'),
      destription?: string(name='Destription', description='The description of the file system.', example='FilesDescription'),
      encryptType?: int32(name='EncryptType', description='Indicates whether data in the file system is encrypted.

You can use keys that are managed by Key Management Service (KMS) to encrypt the data in a file system. When you read and write the encrypted data, the data is automatically decrypted.

Default value: 0. Valid values:

*   0: The data in the file system is not encrypted.
*   1: The data in the file system is encrypted by using a NAS-managed key. This parameter is valid if FileSystemType is set to standard or extreme.
*   2: The data in the file system is encrypted by using a KMS-managed key. This parameter is valid only if FileSystemType is set to extreme.', example='0'),
      fileSystemId?: string(name='FileSystemId', description='The ID of the file system.', example='088b****'),
      fileSystemType?: string(name='FileSystemType', description='The type of the file system. Valid value:

*   standard: general-purpose network-attached storage (NAS) file systems.
*   extreme: extreme NAS file systems.', example='standard'),
      meteredSize?: int32(name='MeteredSize', description='The used capacity of the NAS file system. Unit: bytes.', example='1216816455'),
      mountTargetList?: {
        mountTargets?: [ 
        {
          accessGroup?: string(name='AccessGroup', description='Indicates whether the permission group is the default permission group of the user.

Valid values:

*   true: The permission group is the default permission group. In this case, all IP addresses are allowed to access the permission group, and the user cannot delete the permission group and permission rules in the permission group.
*   false: The permission group is not the default permission group.', example='DEFAULT_VPC_GROUP_NAME'),
          mountTargetDomain?: string(name='MountTargetDomain', description='The domain in which the mount target resides.', example='088b****-lj2.cn-hangzhou.nas.aliyuncs.com'),
          networkType?: string(name='NetworkType', description='The network type. Valid values:

*   vpc
*   classic', example='vpc'),
          status?: string(name='Status', description='The status of the mount target. Valid values:

*   Active: The mount target is available.
*   Inactive: The mount target is unavailable.
*   Pending: The mount target is being created or modified.
*   Deleting: The mount target is being deleted.', example='Active'),
          vpcId?: string(name='VpcId', description='The ID of the virtual private cloud (VPC).', example='vpc-8vbvb34rtyh6xb3zrehs1****'),
          vswId?: string(name='VswId', description='The vSwitch ID.', example='vsw-8vb34rtyh6xb3zrehs1****'),
        }
      ](name='MountTargets')
      }(name='MountTargetList', description='The list of mount targets.'),
      packageList?: {
        packages?: [ 
        {
          packageId?: string(name='PackageId', description='The ID of the storage plan.', example='naspackage-0be9c4b624-37****'),
        }
      ](name='Packages')
      }(name='PackageList', description='The list of storage plans.'),
      protocolType?: string(name='ProtocolType', description='The protocol type of the file system. Valid values:

*   NFS- SMB', example='NFS'),
      regionId?: string(name='RegionId', description='The region ID.', example='cn-hangzhou'),
      status?: string(name='Status', description='The status of the file system. Valid values:

*   Pending: The file system is being created or modified.
*   Running: The file system is available.
*   Stopped: The file system is unavailable.
*   Extending: The file system is being scaled up.
*   Stopping: The file system is being disabled.
*   Deleting: The file system is being deleted.', example='Running'),
      storageType?: string(name='StorageType', description='The storage type of the file system.

*   Valid values if FileSystemType is set to standard: Capacity and Performance.
*   Valid values if FileSystemType is set to extreme: standard and advance.', example='Performance'),
      vpcId?: string(name='VpcId', description='The ID of the VPC.', example='vpc-bp132kgui8n0targbn1cm'),
    }
  ](name='FileSystems')
  }(name='FileSystemList', description='The queried file systems.'),
  pageNumber?: int32(name='PageNumber', description='The page number.', example='1'),
  pageSize?: int32(name='PageSize', description='The number of entries returned per page. Valid values: 1 to 50. Default value: 10.', example='10'),
  requestId?: string(name='RequestId', description='The request ID.', example='25638B77-2F19-5DC5-B578-7790CE92052B'),
  totalCount?: int32(name='TotalCount', description='The total number of entries.', example='1'),
}

model ListFileSystemWithMountTargetsResponse = {
  headers?: map[string]string(name='headers'),
  statusCode?: int32(name='statusCode'),
  body?: ListFileSystemWithMountTargetsResponseBody(name='body'),
}

/**
 * @summary Queries file systems and mount targets.
 *
 * @param request ListFileSystemWithMountTargetsRequest
 * @param runtime runtime options for this request RuntimeOptions
 * @return ListFileSystemWithMountTargetsResponse
 */
async function listFileSystemWithMountTargetsWithOptions(request: ListFileSystemWithMountTargetsRequest, runtime: $RuntimeOptions): ListFileSystemWithMountTargetsResponse {
  request.validate();
  var query = OpenApiUtil.query(request.toMap());
  var req = new OpenApiUtil.OpenApiRequest{ 
    query = OpenApiUtil.query(query),
  };
  var params = new OpenApiUtil.Params{
    action = 'ListFileSystemWithMountTargets',
    version = '2018-04-12',
    protocol = 'HTTPS',
    pathname = '/',
    method = 'GET',
    authType = 'AK',
    style = 'RPC',
    reqBodyType = 'formData',
    bodyType = 'json',
  };
  return callApi(params, req, runtime);
}

/**
 * @summary Queries file systems and mount targets.
 *
 * @param request ListFileSystemWithMountTargetsRequest
 * @return ListFileSystemWithMountTargetsResponse
 */
async function listFileSystemWithMountTargets(request: ListFileSystemWithMountTargetsRequest): ListFileSystemWithMountTargetsResponse {
  var runtime = new $RuntimeOptions{};
  return listFileSystemWithMountTargetsWithOptions(request, runtime);
}

model ListImagesRequest {
  baseOsTag?: string(name='BaseOsTag', description='The image tag of the operating system. The tag is used only for management nodes.', example='CentOS_7.2_64'),
  instanceType?: string(name='InstanceType', description='The instance type.

*   If a value is passed to the parameter, the list of images that are supported by the specified instance type is queried.
*   If no value is passed to the parameter, the list of images that are supported by all instance types is queried.', example='ecs.n1.medium'),
}

model ListImagesResponseBody = {
  osTags?: {
    osInfo?: [ 
    {
      architecture?: string(name='Architecture', description='The architecture of the operating system. Valid values:

*   i386
*   x86_64', example='i386'),
      baseOsTag?: string(name='BaseOsTag', description='The image tag of the operating system. The tag is used only for management nodes.', example='CentOS_7.2_64'),
      imageId?: string(name='ImageId', description='The ID of the image.', example='m-bp1h8aoe73p71iow****'),
      OSName?: string(name='OSName', description='The name of the image.', example='CentOS_7.2_64'),
      OSNameEn?: string(name='OSNameEn', description='The name of the image in English.', example='CentOS_7.2_64'),
      osTag?: string(name='OsTag', description='The tag that is added to the image.', example='CentOS_7.2_64'),
      platform?: string(name='Platform', description='The operating system. Valid values:

*   CentOS
*   windows', example='CentOS'),
      version?: string(name='Version', description='The version of the operating system.', example='7.2'),
    }
  ](name='OsInfo')
  }(name='OsTags', description='The list of images that are supported by E-HPC.'),
  requestId?: string(name='RequestId', description='The ID of the request.', example='04F0F334-1335-436C-A1D7-6C044FE7****'),
}

model ListImagesResponse = {
  headers?: map[string]string(name='headers'),
  statusCode?: int32(name='statusCode'),
  body?: ListImagesResponseBody(name='body'),
}

/**
 * @summary Queries the list of images that can be installed in a cluster.
 *
 * @param request ListImagesRequest
 * @param runtime runtime options for this request RuntimeOptions
 * @return ListImagesResponse
 */
async function listImagesWithOptions(request: ListImagesRequest, runtime: $RuntimeOptions): ListImagesResponse {
  request.validate();
  var query = OpenApiUtil.query(request.toMap());
  var req = new OpenApiUtil.OpenApiRequest{ 
    query = OpenApiUtil.query(query),
  };
  var params = new OpenApiUtil.Params{
    action = 'ListImages',
    version = '2018-04-12',
    protocol = 'HTTPS',
    pathname = '/',
    method = 'GET',
    authType = 'AK',
    style = 'RPC',
    reqBodyType = 'formData',
    bodyType = 'json',
  };
  return callApi(params, req, runtime);
}

/**
 * @summary Queries the list of images that can be installed in a cluster.
 *
 * @param request ListImagesRequest
 * @return ListImagesResponse
 */
async function listImages(request: ListImagesRequest): ListImagesResponse {
  var runtime = new $RuntimeOptions{};
  return listImagesWithOptions(request, runtime);
}

model ListInstalledSoftwareRequest {
  clusterId?: string(name='ClusterId', description='The cluster ID.

You can call the [ListClusters](https://help.aliyun.com/document_detail/87116.html) operation to query the cluster ID.

This parameter is required.', example='ehpc-hz-FYUr32****'),
}

model ListInstalledSoftwareResponseBody = {
  requestId?: string(name='RequestId', description='The request ID.', example='DDCA0E7B-03E7-430D-810C-0D508539****'),
  softwareList?: {
    softwareList?: [ 
    {
      softwareId?: string(name='SoftwareId', description='The software ID.', example='MPICH_3.2'),
      softwareName?: string(name='SoftwareName', description='The name of the software.', example='mpich'),
      softwareStatus?: string(name='SoftwareStatus', description='The status of the software. Valid values:

*   Installing: The software is being installed.
*   Installed: The software is installed.', example='Installing'),
      softwareVersion?: string(name='SoftwareVersion', description='The version of the software.', example='3.2'),
    }
  ](name='SoftwareList')
  }(name='SoftwareList', description='The installed software.'),
}

model ListInstalledSoftwareResponse = {
  headers?: map[string]string(name='headers'),
  statusCode?: int32(name='statusCode'),
  body?: ListInstalledSoftwareResponseBody(name='body'),
}

/**
 * @summary Queries the software that is installed in a cluster.
 *
 * @param request ListInstalledSoftwareRequest
 * @param runtime runtime options for this request RuntimeOptions
 * @return ListInstalledSoftwareResponse
 */
async function listInstalledSoftwareWithOptions(request: ListInstalledSoftwareRequest, runtime: $RuntimeOptions): ListInstalledSoftwareResponse {
  request.validate();
  var query = OpenApiUtil.query(request.toMap());
  var req = new OpenApiUtil.OpenApiRequest{ 
    query = OpenApiUtil.query(query),
  };
  var params = new OpenApiUtil.Params{
    action = 'ListInstalledSoftware',
    version = '2018-04-12',
    protocol = 'HTTPS',
    pathname = '/',
    method = 'GET',
    authType = 'AK',
    style = 'RPC',
    reqBodyType = 'formData',
    bodyType = 'json',
  };
  return callApi(params, req, runtime);
}

/**
 * @summary Queries the software that is installed in a cluster.
 *
 * @param request ListInstalledSoftwareRequest
 * @return ListInstalledSoftwareResponse
 */
async function listInstalledSoftware(request: ListInstalledSoftwareRequest): ListInstalledSoftwareResponse {
  var runtime = new $RuntimeOptions{};
  return listInstalledSoftwareWithOptions(request, runtime);
}

model ListInvocationResultsRequest {
  clusterId?: string(name='ClusterId', description='The ID of the cluster.

You can call the [ListClusters](https://help.aliyun.com/document_detail/87116.html) operation to query the cluster ID.

This parameter is required.', example='ehpc-hz-FYUr32****'),
  commandId?: string(name='CommandId', description='The ID of the command.

You can call the [ListCommands](https://help.aliyun.com/document_detail/87388.html) operation to query the command ID.

This parameter is required.', example='c-hz01v8x80o3****'),
  instance?: [ 
    {
      id?: string(name='Id', description='The ID of the node on which the command is run.

>  The Instance.N.Id parameter specifies the node on which the command is run. If it is not specified, the command is run on all nodes of the cluster.', example='i-uf65bh2113hlqvyr****'),
    }
  ](name='Instance', description='The information of nodes on which the command is run.'),
  invokeRecordStatus?: string(name='InvokeRecordStatus', description='The status of the command that you want to query. Valid values:

*   Finished
*   Running
*   Failed
*   Stopped', example='Finished'),
  pageNumber?: int32(name='PageNumber', description='The number of the page to return.

Page numbers start from 1.

Default value: 1', example='1'),
  pageSize?: int32(name='PageSize', description='The number of entries to return on each page. Valid values: 1 to 50.

Default value: 10', example='10'),
}

model ListInvocationResultsResponseBody = {
  invocationResults?: {
    invocationResult?: [ 
    {
      commandId?: string(name='CommandId', description='The ID of the command.', example='c-hz01v8x80o3****'),
      exitCode?: int32(name='ExitCode', description='The exit code.', example='0'),
      finishedTime?: string(name='FinishedTime', description='The time at which the command entered the Finished state.', example='2021-09-06T09:14:56Z'),
      instanceId?: string(name='InstanceId', description='The ID of the node on which the command was run.', example='i-uf65bh2113hlqvyr****'),
      invokeRecordStatus?: string(name='InvokeRecordStatus', description='The status of the command. Valid values:

*   Finished
*   Running
*   Failed
*   Stopped', example='Finished'),
      message?: string(name='Message', description='The output result.', example='hello world'),
      success?: boolean(name='Success', description='Indicates whether the command was run and its result was obtained.', example='true'),
    }
  ](name='InvocationResult')
  }(name='InvocationResults', description='The result of the command.'),
  pageNumber?: int32(name='PageNumber', description='The page number of the returned page.', example='1'),
  pageSize?: int32(name='PageSize', description='The number of entries returned per page.', example='10'),
  requestId?: string(name='RequestId', description='The ID of the request.', example='04F0F334-1335-436C-A1D7-6C044FE73368'),
  totalCount?: int32(name='TotalCount', description='The total number of returned entries.', example='1'),
}

model ListInvocationResultsResponse = {
  headers?: map[string]string(name='headers'),
  statusCode?: int32(name='statusCode'),
  body?: ListInvocationResultsResponseBody(name='body'),
}

/**
 * @summary Queries the result of an interactive command in a cluster.
 *
 * @param request ListInvocationResultsRequest
 * @param runtime runtime options for this request RuntimeOptions
 * @return ListInvocationResultsResponse
 */
async function listInvocationResultsWithOptions(request: ListInvocationResultsRequest, runtime: $RuntimeOptions): ListInvocationResultsResponse {
  request.validate();
  var query = OpenApiUtil.query(request.toMap());
  var req = new OpenApiUtil.OpenApiRequest{ 
    query = OpenApiUtil.query(query),
  };
  var params = new OpenApiUtil.Params{
    action = 'ListInvocationResults',
    version = '2018-04-12',
    protocol = 'HTTPS',
    pathname = '/',
    method = 'GET',
    authType = 'AK',
    style = 'RPC',
    reqBodyType = 'formData',
    bodyType = 'json',
  };
  return callApi(params, req, runtime);
}

/**
 * @summary Queries the result of an interactive command in a cluster.
 *
 * @param request ListInvocationResultsRequest
 * @return ListInvocationResultsResponse
 */
async function listInvocationResults(request: ListInvocationResultsRequest): ListInvocationResultsResponse {
  var runtime = new $RuntimeOptions{};
  return listInvocationResultsWithOptions(request, runtime);
}

model ListInvocationStatusRequest {
  clusterId?: string(name='ClusterId', description='The cluster ID.

You can call the [ListClusters](https://help.aliyun.com/document_detail/87116.html) operation to query the cluster ID.

This parameter is required.', example='ehpc-hz-FYUr32****'),
  commandId?: string(name='CommandId', description='The command ID.

You can call the [ListCommands](https://help.aliyun.com/document_detail/87388.html) operation to query the command ID.

This parameter is required.', example='c-hz01v8x80o3****'),
}

model ListInvocationStatusResponseBody = {
  commandId?: string(name='CommandId', description='The command ID.', example='c-hz01v8x80o3****'),
  invokeInstances?: {
    invokeInstance?: [ 
    {
      instanceId?: string(name='InstanceId', description='The ID of the node.', example='i-uf6abz34m2714bp4****'),
      instanceInvokeStatus?: string(name='InstanceInvokeStatus', description='The status of the node. Valid values:

*   Finished: The running of the node finished.
*   Running: The node is running.
*   Failed: The node failed to run.
*   Stopped: The running of the node stopped.', example='Finished'),
    }
  ](name='InvokeInstance')
  }(name='InvokeInstances', description='An array of execution statuses. An entry is returned for each node.'),
  invokeStatus?: string(name='InvokeStatus', description='The status of the command. Valid values:

*   Finished: The execution of the command finished.
*   Running: The command is being executed.
*   Failed: The command failed to be executed.
*   Stopped: The execution of the command stopped.', example='Finished'),
  requestId?: string(name='RequestId', description='The request ID.', example='04F0F334-1335-436C-A1D7-6C044FE7****'),
}

model ListInvocationStatusResponse = {
  headers?: map[string]string(name='headers'),
  statusCode?: int32(name='statusCode'),
  body?: ListInvocationStatusResponseBody(name='body'),
}

/**
 * @summary Queries the status of an interactive command.
 *
 * @param request ListInvocationStatusRequest
 * @param runtime runtime options for this request RuntimeOptions
 * @return ListInvocationStatusResponse
 */
async function listInvocationStatusWithOptions(request: ListInvocationStatusRequest, runtime: $RuntimeOptions): ListInvocationStatusResponse {
  request.validate();
  var query = OpenApiUtil.query(request.toMap());
  var req = new OpenApiUtil.OpenApiRequest{ 
    query = OpenApiUtil.query(query),
  };
  var params = new OpenApiUtil.Params{
    action = 'ListInvocationStatus',
    version = '2018-04-12',
    protocol = 'HTTPS',
    pathname = '/',
    method = 'GET',
    authType = 'AK',
    style = 'RPC',
    reqBodyType = 'formData',
    bodyType = 'json',
  };
  return callApi(params, req, runtime);
}

/**
 * @summary Queries the status of an interactive command.
 *
 * @param request ListInvocationStatusRequest
 * @return ListInvocationStatusResponse
 */
async function listInvocationStatus(request: ListInvocationStatusRequest): ListInvocationStatusResponse {
  var runtime = new $RuntimeOptions{};
  return listInvocationStatusWithOptions(request, runtime);
}

model ListJobTemplatesRequest {
  name?: string(name='Name', description='The name of the job template.

You can call the [ListJobTemplates](https://help.aliyun.com/document_detail/87248.html) operation to obtain the job template name.', example='jobtemplateName'),
  pageNumber?: int32(name='PageNumber', description='The page number to return. Pages start from page 1.

Default value: 1.', example='1'),
  pageSize?: int32(name='PageSize', description='The number of entries to return per page. Maximum value: 50.

Default value: 10.', example='10'),
}

model ListJobTemplatesResponseBody = {
  pageNumber?: int32(name='PageNumber', description='The page number returned.', example='1'),
  pageSize?: int32(name='PageSize', description='The number of entries returned per page.', example='1'),
  requestId?: string(name='RequestId', description='The request ID.', example='04F0F334-1335-436C-A1D7-6C044FE7****'),
  templates?: {
    jobTemplates?: [ 
    {
      arrayRequest?: string(name='ArrayRequest', description='The queue of the job.

Format: X-Y:Z. X is the minimum index value. Y is the maximum index value. Z is the step size. For example, 2-7:2 indicates that three jobs need to be run and their index values are 2, 4, and 6.', example='2-7:2'),
      clockTime?: string(name='ClockTime', description='The maximum running time of the job. Valid formats:

*   hh:mm:ss
*   mm:ss
*   ss', example='12:00:00'),
      commandLine?: string(name='CommandLine', description='The command that is used to run the job.', example='./LammpsTest/lammps.pbs'),
      gpu?: int32(name='Gpu', description='The maximum GPU usage for individual compute nodes. Valid values: 1 to 8.

The parameter takes effect only when the cluster uses PBS and a compute node is a GPU-accelerated instance.', example='1'),
      id?: string(name='Id', description='The ID of the job template.', example='ehpc-job-tmpl-6RxO5y****'),
      inputFileUrl?: string(name='InputFileUrl', description='The URL of the job files that are uploaded to an Object Storage Service (OSS) bucket.', example='https://test.oss-cn-beijing.aliyuncs.com/test.py'),
      mem?: string(name='Mem', description='The maximum memory usage of a single compute node. The unit can be GB, MB, or KB, and is case-insensitive.', example='1GB'),
      name?: string(name='Name', description='The name of the job template.', example='job1'),
      node?: int32(name='Node', description='The number of compute nodes. Valid values: 1 to 500.', example='2'),
      packagePath?: string(name='PackagePath', description='The path that is used to run the job.', example='./jobfolder'),
      priority?: int32(name='Priority', description='The priority of the job. Valid values: 0 to 9. A larger value indicates a higher priority.', example='0'),
      queue?: string(name='Queue', description='The queue of the job.', example='workq'),
      reRunable?: boolean(name='ReRunable', description='Specifies whether the job can be rerun. Valid values:

*   true: The job can be rerun.
*   false: The job cannot be rerun.', example='false'),
      runasUser?: string(name='RunasUser', description='The name of the user that runs the job.', example='user1'),
      stderrRedirectPath?: string(name='StderrRedirectPath', description='The output file path of stderr.', example='./LammpsTest'),
      stdoutRedirectPath?: string(name='StdoutRedirectPath', description='The output file path of stdout.', example='./Lammps'),
      task?: int32(name='Task', description='The number of tasks required by a single compute node. Valid values: 1 to 1000.', example='2'),
      thread?: int32(name='Thread', description='The number of threads required by a single task. Valid values: 1 to 1000.', example='1'),
      unzipCmd?: string(name='UnzipCmd', description='The command that is used to decompress the job files downloaded from an OSS bucket. The parameter takes effect only when WithUnzipCmd is set to true. Valid values:

*   tar xzf: decompresses GZIP files.
*   tar xf: decompresses TAR files.
*   unzip: decompresses ZIP files.', example='tar xzf'),
      variables?: string(name='Variables', description='The environment variables of the job.', example='[{Name:,Value:},{Name:,Value:}]'),
      withUnzipCmd?: boolean(name='WithUnzipCmd', description='Specifies whether to decompress the job files downloaded from an OSS bucket. Valid value:

*   true: decompresses the job file.
*   false: does not decompress the job file.', example='true'),
    }
  ](name='JobTemplates')
  }(name='Templates', description='The list of job templates.'),
  totalCount?: int32(name='TotalCount', description='The total number of returned entries.', example='1'),
}

model ListJobTemplatesResponse = {
  headers?: map[string]string(name='headers'),
  statusCode?: int32(name='statusCode'),
  body?: ListJobTemplatesResponseBody(name='body'),
}

/**
 * @summary Queries the list of job templates.
 *
 * @param request ListJobTemplatesRequest
 * @param runtime runtime options for this request RuntimeOptions
 * @return ListJobTemplatesResponse
 */
async function listJobTemplatesWithOptions(request: ListJobTemplatesRequest, runtime: $RuntimeOptions): ListJobTemplatesResponse {
  request.validate();
  var query = OpenApiUtil.query(request.toMap());
  var req = new OpenApiUtil.OpenApiRequest{ 
    query = OpenApiUtil.query(query),
  };
  var params = new OpenApiUtil.Params{
    action = 'ListJobTemplates',
    version = '2018-04-12',
    protocol = 'HTTPS',
    pathname = '/',
    method = 'GET',
    authType = 'AK',
    style = 'RPC',
    reqBodyType = 'formData',
    bodyType = 'json',
  };
  return callApi(params, req, runtime);
}

/**
 * @summary Queries the list of job templates.
 *
 * @param request ListJobTemplatesRequest
 * @return ListJobTemplatesResponse
 */
async function listJobTemplates(request: ListJobTemplatesRequest): ListJobTemplatesResponse {
  var runtime = new $RuntimeOptions{};
  return listJobTemplatesWithOptions(request, runtime);
}

model ListJobsRequest {
  clusterId?: string(name='ClusterId', description='The ID of the E-HPC cluster.

You can call the [ListClusters](https://help.aliyun.com/document_detail/87116.html) operation to query the cluster ID.

This parameter is required.', example='ehpc-hz-FYUr32****'),
  owner?: string(name='Owner', description='The name of the user that runs the job.

You can call the [ListUsers](https://help.aliyun.com/document_detail/188572.html) operation to query the users in the cluster.', example='user1'),
  pageNumber?: int32(name='PageNumber', description='The page number of the page to return.

Pages start from 1.

Default value: 1.', example='1'),
  pageSize?: int32(name='PageSize', description='The number of entries to return per page. Maximum value: 50.

Default value: 10.', example='10'),
  rerunable?: string(name='Rerunable', description='Specifies whether the job can be rerun. Valid values:

*   true
*   false

Default value: false.', example='false'),
  state?: string(name='State', description='The status of the job. Valid values:

*   all
*   finished
*   notfinish', example='finished'),
}

model ListJobsResponseBody = {
  jobs?: {
    jobInfo?: [ 
    {
      arrayRequest?: string(name='ArrayRequest', description='The job array. If the job is not in a queue, the output is empty.

Format: X-Y:Z. X is the minimum index value. Y is the maximum index value. Z is the step size. For example, 2-7:2 indicates that three jobs need to be run and their index values are 2, 4, and 6.', example='1-10:2'),
      comment?: string(name='Comment', description='The description of the job.', example='jobDescription'),
      id?: string(name='Id', description='The job ID.', example='0.manager'),
      lastModifyTime?: string(name='LastModifyTime', description='The time when the job was last modified.', example='2018-07-18T17:46:48'),
      name?: string(name='Name', description='The name of the job.', example='job1'),
      nodeList?: string(name='NodeList', description='The list of compute nodes that were used to run the job.', example='[\\\\"compute2\\\\", \\\\"compute3\\\\"]'),
      owner?: string(name='Owner', description='The name of the user that ran the job.', example='user1'),
      priority?: string(name='Priority', description='The priority of the job. Valid values: 0 to 9. A large value indicates a higher priority.', example='0'),
      resources?: {
        cores?: int32(name='Cores', description='The number of CPUs that were used to run the job.', example='2'),
        nodes?: int32(name='Nodes', description='The number of nodes that were used to run the job.', example='0'),
      }(name='Resources', description='The resources that were used to run the job.'),
      shellPath?: string(name='ShellPath', description='The path that was used to run the job.', example='./Temp'),
      startTime?: string(name='StartTime', description='The time when the job was created.', example='2018-07-18T17:46:48'),
      state?: string(name='State', description='The status of the job. Valid values:

*   FINISHED: The job is completed
*   RUNNING: The job connector is running.
*   QUEUED: The job is pending in a queue.', example='FINISHED'),
      stderr?: string(name='Stderr', description='The output file path of stderr.', example='./Temp'),
      stdout?: string(name='Stdout', description='The output file path of stdout.', example='./Temp'),
      submitTime?: string(name='SubmitTime', description='The time when the job was submitted.', example='2018-07-18T17:46:47'),
    }
  ](name='JobInfo')
  }(name='Jobs', description='The list of jobs.'),
  pageNumber?: int32(name='PageNumber', description='The page number returned.', example='1'),
  pageSize?: int32(name='PageSize', description='The number of entries returned per page.', example='10'),
  requestId?: string(name='RequestId', description='The request ID.', example='04F0F334-1335-436C-A1D7-6C044FE7****'),
  totalCount?: int32(name='TotalCount', description='The total number of returned entries.', example='1'),
}

model ListJobsResponse = {
  headers?: map[string]string(name='headers'),
  statusCode?: int32(name='statusCode'),
  body?: ListJobsResponseBody(name='body'),
}

/**
 * @summary Queries the list of jobs in a cluster.
 *
 * @param request ListJobsRequest
 * @param runtime runtime options for this request RuntimeOptions
 * @return ListJobsResponse
 */
async function listJobsWithOptions(request: ListJobsRequest, runtime: $RuntimeOptions): ListJobsResponse {
  request.validate();
  var query = OpenApiUtil.query(request.toMap());
  var req = new OpenApiUtil.OpenApiRequest{ 
    query = OpenApiUtil.query(query),
  };
  var params = new OpenApiUtil.Params{
    action = 'ListJobs',
    version = '2018-04-12',
    protocol = 'HTTPS',
    pathname = '/',
    method = 'GET',
    authType = 'AK',
    style = 'RPC',
    reqBodyType = 'formData',
    bodyType = 'json',
  };
  return callApi(params, req, runtime);
}

/**
 * @summary Queries the list of jobs in a cluster.
 *
 * @param request ListJobsRequest
 * @return ListJobsResponse
 */
async function listJobs(request: ListJobsRequest): ListJobsResponse {
  var runtime = new $RuntimeOptions{};
  return listJobsWithOptions(request, runtime);
}

model ListJobsWithFiltersRequest {
  async?: boolean(name='Async', description='Specifies whether to enable asynchronous query.', example='false'),
  clusterId?: string(name='ClusterId', description='The ID of the E-HPC cluster.

You can call the [ListClusters](https://help.aliyun.com/document_detail/87116.html) operation to query the cluster ID.

This parameter is required.', example='ehpc-hz-FYUr32****'),
  createTimeEnd?: string(name='CreateTimeEnd', description='The latest time when a job is submitted. The value is a UNIX timestamp, which represents the number of seconds that have elapsed since the epoch time January 1, 1970, 00:00:00 UTC.', example='1647428667'),
  createTimeStart?: string(name='CreateTimeStart', description='The earliest time when a job is submitted. The value is a UNIX timestamp, which represents the number of seconds that have elapsed since the epoch time January 1, 1970, 00:00:00 UTC.', example='1647427667'),
  executeOrder?: string(name='ExecuteOrder', description='The order in which jobs are sorted based on the execution time. Valid values:

*   asc: ascending order
*   desc: descending order', example='asc'),
  jobName?: string(name='JobName', description='The name of the job. Fuzzy search is supported.', example='job1'),
  jobStatus?: string(name='JobStatus', description='The status of the job. Valid values:

*   all
*   finished
*   notfinish

Default value: all.', example='finished'),
  nodes?: [ string ](name='Nodes', description='The information about the computing nodes that are used to run the job.'),
  pageNumber?: long(name='PageNumber', description='The page number to return.

Pages start from 1.

Default value: 1.', example='1'),
  pageSize?: long(name='PageSize', description='The number of entries per page. Maximum value: 50.

Default value: 10.', example='10'),
  pendOrder?: string(name='PendOrder', description='The order in which jobs are sorted based on the time when they queue. Valid values:

*   asc: ascending order
*   desc: descending order', example='desc'),
  queues?: [ string ](name='Queues', description='The information about the queues in which the job is run.'),
  regionId?: string(name='RegionId', description='The ID of the region. You can call the [ListRegions](https://help.aliyun.com/document_detail/188593.html) operation to query the list of regions where E-HPC is supported.', example='cn-hangzhou'),
  submitOrder?: string(name='SubmitOrder', description='The order in which jobs are sorted based on the time when they are submitted. Valid values:

*   asc: ascending order
*   desc: descending order', example='asc'),
  users?: [ string ](name='Users', description='The users that run the job.'),
}

model ListJobsWithFiltersResponseBody = {
  jobs?: [ 
    {
      arrayRequest?: string(name='ArrayRequest', description='The job array. If the job is not in a queue, the output is empty.

Format: X-Y:Z. X is the minimum index value. Y is the maximum index value. Z is the step size. For example, 2-7:2 indicates that three jobs need to be run and their index values are 2, 4, and 6.', example='1-10:2'),
      comment?: string(name='Comment', description='The description of the job.', example='jobDescription'),
      id?: string(name='Id', description='The job ID.', example='8.scheduler'),
      lastModifyTime?: string(name='LastModifyTime', description='The time when the job was last modified.', example='1647428667'),
      name?: string(name='Name', description='The name of the job.', example='job1'),
      nodeList?: string(name='NodeList', description='The list of compute nodes that were used to run the job.', example='[\\\\"compute2\\\\", \\\\"compute3\\\\"]'),
      owner?: string(name='Owner', description='The name of the user that ran the job.', example='test2@scheduler'),
      priority?: string(name='Priority', description='The priority of the job. Valid values: 0 to 9. A larger value indicates a higher priority.', example='0'),
      queue?: string(name='Queue', description='The number of queues that ran the job.', example='2'),
      rerunable?: boolean(name='Rerunable', description='Indicates whether the job can be run again. Valid values:

*   true: yes
*   false: no', example='true'),
      resources?: {
        cores?: long(name='Cores', description='The number of CPUs that were used to run the job.', example='2'),
        nodes?: long(name='Nodes', description='The number of nodes that were used to run the job.', example='0'),
      }(name='Resources', description='The resources that were used to run the job.'),
      shellPath?: string(name='ShellPath', description='The path that was used to run the job.', example='./Temp'),
      startTime?: string(name='StartTime', description='The time when the job was created.', example='1647427667'),
      state?: string(name='State', description='The status of the job. Valid value:

*   FINISHED: The job is completed.
*   RUNNING: The job is running.
*   QUEUED: The job is pending in a queue.', example='FINISHED'),
      stderr?: string(name='Stderr', description='The output file path of stderr.', example='./Temp'),
      stdout?: string(name='Stdout', description='The output file path of stdout.', example='./Temp'),
      submitTime?: string(name='SubmitTime', description='The time when the job was submitted.', example='1647423718'),
      variableList?: string(name='VariableList', description='The list of variables of the job.', example='{"PBS_O_SHELL":"/bin/bash", 	"PBS_O_HOST":"manager", 	"PBS_O_SYSTEM":"Linux", 	"PBS_O_LANG":"en_US.UTF-8", 	"PBS_O_QUEUE":"workq"}'),
    }
  ](name='Jobs', description='The list of jobs.'),
  pageNumber?: long(name='PageNumber', description='The page number returned.', example='1'),
  pageSize?: long(name='PageSize', description='The number of entries returned per page.', example='10'),
  requestId?: string(name='RequestId', description='The request ID.', example='04F0F334-1335-436C-A1D7-6C044FE7****'),
  success?: boolean(name='Success', description='Indicates whether the request was successful. Valid values:

*   true: The request was successful.
*   false: The request failed.', example='true'),
  totalCount?: int32(name='TotalCount', description='The total number of entries returned.', example='1'),
}

model ListJobsWithFiltersResponse = {
  headers?: map[string]string(name='headers'),
  statusCode?: int32(name='statusCode'),
  body?: ListJobsWithFiltersResponseBody(name='body'),
}

/**
 * @summary Queries the details of a specified job.
 *
 * @param request ListJobsWithFiltersRequest
 * @param runtime runtime options for this request RuntimeOptions
 * @return ListJobsWithFiltersResponse
 */
async function listJobsWithFiltersWithOptions(request: ListJobsWithFiltersRequest, runtime: $RuntimeOptions): ListJobsWithFiltersResponse {
  request.validate();
  var query = OpenApiUtil.query(request.toMap());
  var req = new OpenApiUtil.OpenApiRequest{ 
    query = OpenApiUtil.query(query),
  };
  var params = new OpenApiUtil.Params{
    action = 'ListJobsWithFilters',
    version = '2018-04-12',
    protocol = 'HTTPS',
    pathname = '/',
    method = 'GET',
    authType = 'AK',
    style = 'RPC',
    reqBodyType = 'formData',
    bodyType = 'json',
  };
  return callApi(params, req, runtime);
}

/**
 * @summary Queries the details of a specified job.
 *
 * @param request ListJobsWithFiltersRequest
 * @return ListJobsWithFiltersResponse
 */
async function listJobsWithFilters(request: ListJobsWithFiltersRequest): ListJobsWithFiltersResponse {
  var runtime = new $RuntimeOptions{};
  return listJobsWithFiltersWithOptions(request, runtime);
}

model ListNodesRequest {
  clusterId?: string(name='ClusterId', description='The ID of the cluster.

You can call the [ListClusters](https://help.aliyun.com/document_detail/87116.html) operation to query the cluster ID.

This parameter is required.', example='ehpc-hz-FYUr32****'),
  filter?: string(name='Filter', description='The filter options of the node list.

Format: {"status":"node_status"}. Replace node_status with the node status. Valid values of node_status:

*   uninit: The node is being installed.
*   exception: An exception occurred on the node.
*   running: The node is running.
*   initing: The node is being initialized.
*   releasing: The node is being released.
*   untracking: The node is not added to the cluster.
*   stopped: The node is stopped.', example='{"status":"running"}'),
  hostName?: string(name='HostName', description='The name of the node. You can perform a fuzzy search. MySQL regular expressions are supported.', example='test-HostName'),
  hostNamePrefix?: string(name='HostNamePrefix', description='The prefix of the hostname. You can query nodes that have a specified prefix.', example='compute'),
  hostNameSuffix?: string(name='HostNameSuffix', description='The suffix of the hostname. You can query nodes that have a specified suffix.', example='01'),
  pageNumber?: int32(name='PageNumber', description='The number of the page to return. Pages start from page 1.', example='1'),
  pageSize?: int32(name='PageSize', description='The number of entries to return on each page. Valid values: 1 to 100.

Default value: 10.', example='10'),
  privateIpAddress?: string(name='PrivateIpAddress', description='The private IP address of the node.', example='``172.16.**.**``'),
  role?: string(name='Role', description='The type of the node. Valid values:

*   Manager: management node
*   Login: logon node
*   Compute: compute node', example='Manager'),
  sequence?: string(name='Sequence', description='The sorting method of the node list. Valid values:

*   Forward: sorts the nodes in chronological order.
*   Backward: sorts the nodes in reverse chronological order.

Default value: Forward.

>  This parameter is used together with the SortBy parameter. If you set SortBy to AddedTime and set Sequence to Forward, nodes are queried in ascending order of time that they are added.', example='Forward'),
  sortBy?: string(name='SortBy', description='The sorting method of the node list. Valid values:

*   AddedTime: sorts the nodes by the time that they are added.
*   HostName: sorts the nodes by their host names.', example='AddedTime'),
}

model ListNodesResponseBody = {
  nodes?: {
    nodeInfo?: [ 
    {
      addTime?: string(name='AddTime', description='The time when the node is added to the cluster.', example='2020-06-09T06:22:02.000Z'),
      createMode?: string(name='CreateMode', description='The mode in which the compute nodes are added. Valid values:

*   manual: The node is manually added.
*   autoscale: The node is automatically added.', example='manual'),
      createdByEhpc?: boolean(name='CreatedByEhpc', description='Indicates whether the node is created by using E-HPC.

*   true: The node is created by using E-HPC.
*   false: The node is not created by using E-HPC.', example='true'),
      expired?: boolean(name='Expired', description='Indicates whether the subscription node expired. For a pay-as-you-go node, false is returned.', example='false'),
      expiredTime?: string(name='ExpiredTime', description='The time when the subscription node expires. For a pay-as-you-go node, a null value is returned.', example='2020-06-09T06:22:02.000Z'),
      hostName?: string(name='HostName', description='The name of the task node.', example='test-HostName'),
      htEnabled?: boolean(name='HtEnabled', description='Indicates whether hyper-threading is enabled.', example='true'),
      id?: string(name='Id', description='The node ID.', example='i-bp15707mys2rsy0j****'),
      imageId?: string(name='ImageId', description='The ID of the custom image.', example='centos_7_06_64_20G_alibase_20190711.vhd'),
      imageOwnerAlias?: string(name='ImageOwnerAlias', description='The type of the image. Valid values:

*   system: public image
*   self: custom image
*   others: shared image
*   marketplace: Alibaba Cloud Marketplace image', example='system'),
      instanceType?: string(name='InstanceType', description='The instance types of the node.', example='ecs.c5.large'),
      ipAddress?: string(name='IpAddress', description='The IP address of the node.', example='``172.16.**.**``'),
      location?: string(name='Location', description='The location where the node is deployed. Valid values:

*   OnPremise: The node is deployed on your data center.
*   PublicCloud: The node is deployed on the public cloud.', example='PublicCloud'),
      lockReason?: string(name='LockReason', description='The reason why the node is locked. Valid values:

*   financial: The instance is locked due to overdue payments.
*   security: The node is locked for security reasons.
*   recycling: The preemptible instance is locked and pending release.
*   dedicatedhostfinancial: The ECS instance is locked due to overdue payments of the dedicated host.

By default, an empty string is returned.', example='financial'),
      publicIpAddress?: string(name='PublicIpAddress', description='The public IP address of the server.', example='``172.16.**.**``'),
      regionId?: string(name='RegionId', description='The region ID.', example='cn-hangzhou'),
      roles?: {
        role?: [ string ](name='Role')
      }(name='Roles', description='The type of the node. Valid values:

*   Scheduler: primary scheduling node
*   SchedulerBackup: secondary scheduling node
*   Account: primary domain server node
*   AccountBackup: secondary domain server node
*   Login: logon node
*   Compute: compute node

Scheduling nodes and domain server nodes are management nodes.'),
      spotStrategy?: string(name='SpotStrategy', description='The bidding method of the compute nodes.', example='NoSpot'),
      stateInSched?: string(name='StateInSched', description='The status of the node displayed on the scheduler. The status varies with the scheduler.', example='active'),
      status?: string(name='Status', description='The status of the node. Valid values:

*   uninit: The node is being installed.
*   exception: An exception occurred on the node.
*   running: The node is running.
*   initing: The node is being initialized.
*   releasing: The node is being released.
*   untracking: The node is not added to the cluster.
*   stopped: The node is stopped.', example='running'),
      totalResources?: {
        cpu?: int32(name='Cpu', description='The number of vCPUs.', example='1'),
        gpu?: int32(name='Gpu', description='The number of GPUs.', example='0'),
        memory?: int32(name='Memory', description='The memory capacity. Unit: GB.', example='1024'),
      }(name='TotalResources', description='The statistics of the resources used by the node.'),
      usedResources?: {
        cpu?: int32(name='Cpu', description='The number of vCPUs.', example='0'),
        gpu?: int32(name='Gpu', description='The number of GPUs.', example='0'),
        memory?: int32(name='Memory', description='The memory capacity. Unit: GB.', example='0'),
      }(name='UsedResources', description='The usage of the compute nodes in the cluster. For other types of nodes, an empty value is returned.'),
      vSwitchId?: string(name='VSwitchId', description='The vSwitch ID.', example='vsw-bp1e47optm9g58zcu****'),
      version?: string(name='Version', description='The version of the client that is used for the cluster.', example='1.0.78'),
      vpcId?: string(name='VpcId', description='The VPC ID of the node.', example='vpc-bp1gnu8br4ay7beb2w****'),
      zoneId?: string(name='ZoneId', description='The zone ID.', example='cn-hangzhou-b'),
    }
  ](name='NodeInfo')
  }(name='Nodes', description='The list of nodes.'),
  pageNumber?: int32(name='PageNumber', description='The page number returned.', example='1'),
  pageSize?: int32(name='PageSize', description='The number of entries returned per page.', example='1'),
  requestId?: string(name='RequestId', description='The request ID.', example='89A1AC0F-4A6C-4F3D-98F9-BEF9A823****'),
  totalCount?: int32(name='TotalCount', description='The total number of returned entries.', example='1'),
}

model ListNodesResponse = {
  headers?: map[string]string(name='headers'),
  statusCode?: int32(name='statusCode'),
  body?: ListNodesResponseBody(name='body'),
}

/**
 * @summary Queries the list of nodes in a cluster.
 *
 * @param request ListNodesRequest
 * @param runtime runtime options for this request RuntimeOptions
 * @return ListNodesResponse
 */
async function listNodesWithOptions(request: ListNodesRequest, runtime: $RuntimeOptions): ListNodesResponse {
  request.validate();
  var query = OpenApiUtil.query(request.toMap());
  var req = new OpenApiUtil.OpenApiRequest{ 
    query = OpenApiUtil.query(query),
  };
  var params = new OpenApiUtil.Params{
    action = 'ListNodes',
    version = '2018-04-12',
    protocol = 'HTTPS',
    pathname = '/',
    method = 'GET',
    authType = 'AK',
    style = 'RPC',
    reqBodyType = 'formData',
    bodyType = 'json',
  };
  return callApi(params, req, runtime);
}

/**
 * @summary Queries the list of nodes in a cluster.
 *
 * @param request ListNodesRequest
 * @return ListNodesResponse
 */
async function listNodes(request: ListNodesRequest): ListNodesResponse {
  var runtime = new $RuntimeOptions{};
  return listNodesWithOptions(request, runtime);
}

model ListNodesByQueueRequest {
  async?: boolean(name='Async', description='Specifies whether to enable asynchronous query.', example='false'),
  clusterId?: string(name='ClusterId', description='The ID of the E-HPC cluster.

This parameter is required.', example='ehpc-hz-FYUr32****'),
  pageNumber?: int32(name='PageNumber', description='The number of the page to return. Pages start from page 1.', example='1'),
  pageSize?: int32(name='PageSize', description='The number of entries to return on each page. Valid values: 1 to 50.

Default value: 10.', example='10'),
  queueName?: string(name='QueueName', description='The name of the queue.

This parameter is required.', example='workq'),
}

model ListNodesByQueueResponseBody = {
  nodes?: {
    nodeInfo?: [ 
    {
      addTime?: string(name='AddTime', description='The time when the node was added to the cluster.', example='2019-09-18T13:24:29.000Z'),
      createMode?: string(name='CreateMode', description='The mode in which the node is created. Valid values:

*   manual: The node is manually added.
*   autoscale: The node is automatically added.', example='manual'),
      createdByEhpc?: boolean(name='CreatedByEhpc', description='Indicates whether the node was created by using E-HPC.', example='true'),
      expired?: boolean(name='Expired', description='Indicates whether the subscription node has expired. If the node is a pay-as-you-go node, false is returned.', example='false'),
      expiredTime?: string(name='ExpiredTime', description='The time when the subscription instance expires. If the node is a pay-as-you-go node, a null value is returned.', example='2020-09-18T13:24:29.000Z'),
      hostName?: string(name='HostName', description='The node name.', example='compute0'),
      htEnabled?: boolean(name='HtEnabled', description='Indicates whether Hyper-Threading (HT) is enabled.', example='true'),
      id?: string(name='Id', description='The ID of the instance.', example='i-bp13p7vlcb1uihfv****'),
      imageId?: string(name='ImageId', description='The image ID.', example='centos_7_02_64_20G_alibase_20170818****'),
      imageOwnerAlias?: string(name='ImageOwnerAlias', description='The type of the image. Valid values:

*   system: public image
*   self: custom image
*   others: shared image
*   marketplace: Alibaba Cloud Marketplace image', example='system'),
      ipAddress?: string(name='IpAddress', description='The private IP address of the node.', example='``172.168.**.**``'),
      location?: string(name='Location', description='The location where the node is deployed. Valid values:

*   OnPremise: The cluster is deployed on a hybrid cloud.
*   PublicCloud: The cluster is deployed on a public cloud.', example='PublicCloud'),
      lockReason?: string(name='LockReason', description='The reason why the node is locked. Valid values:

*   financial: The instance is locked due to overdue payments.
*   security: The node is locked for security reasons.
*   recycling: The preemptible instance is locked and pending release.
*   dedicatedhostfinancial: The ECS instance is locked due to overdue payments of the dedicated host.

By default, an empty string is returned.', example='financial'),
      publicIpAddress?: string(name='PublicIpAddress', description='The public IP address of the node.', example='``10.34.**.**``'),
      regionId?: string(name='RegionId', description='The region ID.', example='cn-hangzhou'),
      spotStrategy?: string(name='SpotStrategy', description='The preemption policy of the instance. Valid values:

*   NoSpot: The instance is created as a pay-as-you-go instance.
*   SpotWithPriceLimit: The instance is created as a preemptible instance with a user-defined maximum hourly price.
*   SpotAsPriceGo: The instance is created as a preemptible instance for which the market price at the time of purchase is automatically used as the bid price.', example='NoSpot'),
      stateInSched?: string(name='StateInSched', description='The status of the node displayed on the scheduler. The status varies with the scheduler.', example='active'),
      status?: string(name='Status', description='The status of the node. Valid values:

*   uninit: The node is not initialized.
*   init: The node is being initialized.
*   ready: The node is ready.
*   running: The cluster is running.
*   exception: An exception occurred on the node.
*   untracking: The node is not added to the cluster.', example='untracking'),
      totalResources?: {
        cpu?: int32(name='Cpu', description='The number of CPU cores. Unit: cores.', example='1'),
        gpu?: int32(name='Gpu', description='The total number of GPU cards. Unit: cards.', example='0'),
        memory?: int32(name='Memory', description='The memory capacity. Unit: GB.', example='1024'),
      }(name='TotalResources', description='The number of all resources in the cluster.'),
      usedResources?: {
        cpu?: int32(name='Cpu', description='The number of CPU cores. Unit: cores.', example='1'),
        gpu?: int32(name='Gpu', description='The total number of GPU cards. Unit: cards.', example='0'),
        memory?: int32(name='Memory', description='The memory capacity. Unit: GB.', example='1'),
      }(name='UsedResources', description='The usage of the compute nodes in the cluster. For other types of nodes, an empty value is returned.'),
      vSwitchId?: string(name='VSwitchId', description='The vSwitch ID.', example='vsw-bp1e47optm9g58zcu****'),
      version?: string(name='Version', description='The version of the E-HPC client.', example='1.0.64'),
      vpcId?: string(name='VpcId', description='The VPC ID of the node.', example='vpc-bp1gnu8br4ay7beb2w****'),
      zoneId?: string(name='ZoneId', description='The zone ID of the node.', example='cn-hangzhou-b'),
    }
  ](name='NodeInfo')
  }(name='Nodes', description='The list of nodes.'),
  pageNumber?: int32(name='PageNumber', description='The number of the returned page.', example='1'),
  pageSize?: int32(name='PageSize', description='The number of entries returned per page.', example='1'),
  requestId?: string(name='RequestId', description='The request ID.', example='B405FF19-2D5F-4489-A84C-BC15CC1B24BD'),
  totalCount?: int32(name='TotalCount', description='The total number of returned entries.', example='1'),
}

model ListNodesByQueueResponse = {
  headers?: map[string]string(name='headers'),
  statusCode?: int32(name='statusCode'),
  body?: ListNodesByQueueResponseBody(name='body'),
}

/**
 * @summary Queries the node information of a single cluster within an Alibaba Cloud account by queue.
 *
 * @param request ListNodesByQueueRequest
 * @param runtime runtime options for this request RuntimeOptions
 * @return ListNodesByQueueResponse
 */
async function listNodesByQueueWithOptions(request: ListNodesByQueueRequest, runtime: $RuntimeOptions): ListNodesByQueueResponse {
  request.validate();
  var query = OpenApiUtil.query(request.toMap());
  var req = new OpenApiUtil.OpenApiRequest{ 
    query = OpenApiUtil.query(query),
  };
  var params = new OpenApiUtil.Params{
    action = 'ListNodesByQueue',
    version = '2018-04-12',
    protocol = 'HTTPS',
    pathname = '/',
    method = 'GET',
    authType = 'AK',
    style = 'RPC',
    reqBodyType = 'formData',
    bodyType = 'json',
  };
  return callApi(params, req, runtime);
}

/**
 * @summary Queries the node information of a single cluster within an Alibaba Cloud account by queue.
 *
 * @param request ListNodesByQueueRequest
 * @return ListNodesByQueueResponse
 */
async function listNodesByQueue(request: ListNodesByQueueRequest): ListNodesByQueueResponse {
  var runtime = new $RuntimeOptions{};
  return listNodesByQueueWithOptions(request, runtime);
}

model ListNodesNoPagingRequest {
  clusterId?: string(name='ClusterId', description='The ID of the cluster.

You can call the [ListClusters](https://help.aliyun.com/document_detail/87116.html) operation to query the cluster ID.

This parameter is required.', example='ehpc-hz-FYUr32****'),
  hostName?: string(name='HostName', description='The name of the node. You can perform a fuzzy search. MySQL regular expressions are supported.', example='Compute0'),
  role?: string(name='Role', description='The type of the node. Valid values:

*   Manager: management node
*   Login: logon node
*   Compute: compute node

Default value: Compute.', example='Compute'),
  sequence?: string(name='Sequence', description='The sorting method of the node list. Valid values:

*   Forward: sorts the nodes in chronological order.
*   Backward: sorts the nodes in reverse chronological order.

Default value: Forward.', example='Forward'),
}

model ListNodesNoPagingResponseBody = {
  nodes?: {
    nodeInfo?: [ 
    {
      hostName?: string(name='HostName', description='The node name.', example='compute0'),
      id?: string(name='Id', description='The node ID.', example='i-bp13p7vlcb1uihfv****'),
      imageId?: string(name='ImageId', description='The image ID.', example='centos_7_02_64_20G_alibase_20170818****'),
      instanceType?: string(name='InstanceType', description='The node type.', example='ecs.n1.tiny'),
      status?: string(name='Status', description='The status of the node. Valid values:

*   uninit: The node is being installed.
*   exception: An exception occurred on the node.
*   running: The node is running.
*   initing: The node is being initialized.
*   releasing: The node is being released.
*   untracking: The node is not added to the cluster.
*   stopped: The node is stopped.', example='untracking'),
    }
  ](name='NodeInfo')
  }(name='Nodes', description='The list of nodes.'),
  requestId?: string(name='RequestId', description='The request ID.', example='04F0F334-1335-436C-A1D7-6C044FE7****'),
}

model ListNodesNoPagingResponse = {
  headers?: map[string]string(name='headers'),
  statusCode?: int32(name='statusCode'),
  body?: ListNodesNoPagingResponseBody(name='body'),
}

/**
 * @summary Queries the information of all nodes in a specified cluster on one page.
 *
 * @param request ListNodesNoPagingRequest
 * @param runtime runtime options for this request RuntimeOptions
 * @return ListNodesNoPagingResponse
 */
async function listNodesNoPagingWithOptions(request: ListNodesNoPagingRequest, runtime: $RuntimeOptions): ListNodesNoPagingResponse {
  request.validate();
  var query = OpenApiUtil.query(request.toMap());
  var req = new OpenApiUtil.OpenApiRequest{ 
    query = OpenApiUtil.query(query),
  };
  var params = new OpenApiUtil.Params{
    action = 'ListNodesNoPaging',
    version = '2018-04-12',
    protocol = 'HTTPS',
    pathname = '/',
    method = 'GET',
    authType = 'AK',
    style = 'RPC',
    reqBodyType = 'formData',
    bodyType = 'json',
  };
  return callApi(params, req, runtime);
}

/**
 * @summary Queries the information of all nodes in a specified cluster on one page.
 *
 * @param request ListNodesNoPagingRequest
 * @return ListNodesNoPagingResponse
 */
async function listNodesNoPaging(request: ListNodesNoPagingRequest): ListNodesNoPagingResponse {
  var runtime = new $RuntimeOptions{};
  return listNodesNoPagingWithOptions(request, runtime);
}

model ListPreferredEcsTypesRequest {
  instanceChargeType?: string(name='InstanceChargeType', description='The billing method of the ECS instances. Valid values:

*   PostPaid
*   PrePaid', example='PostPaid'),
  spotStrategy?: string(name='SpotStrategy', description='The bidding policy of the ECS instance. Valid values:

*   NoSpot: The instance is created as a pay-as-you-go instance.
*   SpotWithPriceLimit: The instance is created as a preemptible instance with a user-defined maximum hourly price.
*   SpotAsPriceGo: The instance is created as a preemptible instance for which the market price at the time of purchase is automatically used as the bidding price.', example='NoSpot'),
  zoneId?: string(name='ZoneId', description='The zone ID.

This parameter is required.', example='cn-hangzhou-b'),
}

model ListPreferredEcsTypesResponseBody = {
  requestId?: string(name='RequestId', description='The request ID.', example='04F0F334-1335-436C-A1D7-6C044FE73368'),
  series?: {
    seriesInfo?: [ 
    {
      roles?: {
        compute?: {
          instanceTypeId?: [ string ](name='InstanceTypeId')
        }(name='Compute', description='The list of recommended ECS instance types for compute nodes.'),
        login?: {
          instanceTypeId?: [ string ](name='InstanceTypeId')
        }(name='Login', description='The list of recommended ECS instance types for logon nodes.'),
        manager?: {
          instanceTypeId?: [ string ](name='InstanceTypeId')
        }(name='Manager', description='The list of recommended ECS instance types for management nodes.'),
      }(name='Roles', description='Recommended instance types for nodes in an E-HPC cluser.'),
      seriesId?: string(name='SeriesId', description='The ID of the ECS instance series. Valid values:

*   HighCompute: compute-optimized instance families
*   HighMem: memory-optimized instance families
*   GPU: GPU-accelerated instance families
*   All: all instance families', example='All'),
      seriesName?: string(name='SeriesName', description='The name of the instance series. Valid values:

*   SeriesHighCompute
*   SeriesHighMem
*   SeriesGPU
*   SeriesAll', example='SeriesAll'),
    }
  ](name='SeriesInfo')
  }(name='Series', description='The list of recommended ECS instances. Each SeriesInfo element contains the recommended ECS instance types for various nodes in the E-HPC cluster.'),
  supportSpotInstance?: boolean(name='SupportSpotInstance', description='Indicates whether preemptible instances are supported.', example='true'),
}

model ListPreferredEcsTypesResponse = {
  headers?: map[string]string(name='headers'),
  statusCode?: int32(name='statusCode'),
  body?: ListPreferredEcsTypesResponseBody(name='body'),
}

/**
 * @summary Queries the Elastic Compute Service (ECS) instance types recommended by Elastic High Performance Computing (E-HPC).
 *
 * @param request ListPreferredEcsTypesRequest
 * @param runtime runtime options for this request RuntimeOptions
 * @return ListPreferredEcsTypesResponse
 */
async function listPreferredEcsTypesWithOptions(request: ListPreferredEcsTypesRequest, runtime: $RuntimeOptions): ListPreferredEcsTypesResponse {
  request.validate();
  var query = OpenApiUtil.query(request.toMap());
  var req = new OpenApiUtil.OpenApiRequest{ 
    query = OpenApiUtil.query(query),
  };
  var params = new OpenApiUtil.Params{
    action = 'ListPreferredEcsTypes',
    version = '2018-04-12',
    protocol = 'HTTPS',
    pathname = '/',
    method = 'GET',
    authType = 'AK',
    style = 'RPC',
    reqBodyType = 'formData',
    bodyType = 'json',
  };
  return callApi(params, req, runtime);
}

/**
 * @summary Queries the Elastic Compute Service (ECS) instance types recommended by Elastic High Performance Computing (E-HPC).
 *
 * @param request ListPreferredEcsTypesRequest
 * @return ListPreferredEcsTypesResponse
 */
async function listPreferredEcsTypes(request: ListPreferredEcsTypesRequest): ListPreferredEcsTypesResponse {
  var runtime = new $RuntimeOptions{};
  return listPreferredEcsTypesWithOptions(request, runtime);
}

model ListQueuesRequest {
  async?: boolean(name='Async', description='Specifies whether to enable asynchronous query.', example='false'),
  clusterId?: string(name='ClusterId', description='The ID of the cluster.

This parameter is required.', example='ehpc-hz-FYUr32****'),
}

model ListQueuesResponseBody = {
  queues?: {
    queueInfo?: [ 
    {
      computeInstanceType?: {
        instanceType?: [ string ](name='InstanceType')
      }(name='ComputeInstanceType', description='The instance type of the compute nodes.'),
      deploymentSetId?: string(name='DeploymentSetId', description='The ID of the deployment set to which to deploy the instance. You can call the [DescribeDeploymentSets](https://help.aliyun.com/document_detail/91313.html) operation to query the deployment set ID. Only the deployment sets that use low latency policies are supported.', example='ds-bp1frxuzdg87zh4pzq****'),
      enableAutoGrow?: boolean(name='EnableAutoGrow', description='Indicates whether auto scale-out is enabled for the queue. Valid values:

*   true
*   false', example='false'),
      hostNamePrefix?: string(name='HostNamePrefix', description='The prefix of the hostname.', example='compute'),
      hostNameSuffix?: string(name='HostNameSuffix', description='The suffix of the hostname.', example='01'),
      imageId?: string(name='ImageId', description='The ID of the image.', example='centos_7_06_64_20G_alibase_20****.vhd'),
      networkInterfaceTrafficMode?: string(name='NetworkInterfaceTrafficMode', description='The communication mode of the elastic network interface (ENI). Valid values:

*   Standard: The TCP communication mode is used.
*   HighPerformance: The Elastic RDMA Interface (ERI) is enabled and the remote direct memory access (RDMA) communication mode is used.', example='Standard'),
      queueName?: string(name='QueueName', description='The name of the queue.', example='workq'),
      resourceGroupId?: string(name='ResourceGroupId', description='The ID of the resource group to which the queue belongs.', example='rg-acfmxp7uc24****'),
      spotInstanceTypes?: {
        instance?: [ 
        {
          instanceType?: string(name='InstanceType', description='The instance type of the preemptible instance.', example='ecs.n1.tiny'),
          spotPriceLimit?: float(name='SpotPriceLimit', description='The maximum hourly price of the instance. The price can be accurate to three decimal places. This parameter is valid only when the SpotStrategy parameter is set to SpotWithPriceLimit.', example='0.062'),
        }
      ](name='Instance')
      }(name='SpotInstanceTypes', description='The information about the preemptible instance.'),
      spotStrategy?: string(name='SpotStrategy', description='The preemption policy of the compute nodes. Valid values:

*   NoSpot: The instance is a regular pay-as-you-go instance.
*   SpotWithPriceLimit: The instance is a preemptible instance for which you specify the maximum hourly price.
*   SpotAsPriceGo: The instance is a preemptible instance for which the market price at the time of purchase is automatically used as the bid price.', example='NoSpot'),
      type?: string(name='Type', description='The type of queue. Valid values:

*   Execution: Queues in which jobs can be executed.
*   Router: Queues in which jobs cannot be executed. The received jobs in the queues must be forwarded to the bound Execution queues for execution.', example='Execution'),
      useESS?: boolean(name='UseESS', description='Specifies whether to use scaling groups of Auto Scaling.', example='false'),
    }
  ](name='QueueInfo')
  }(name='Queues', description='The queried cluster queues.'),
  requestId?: string(name='RequestId', description='The ID of the request.', example='C6E5005C-00B0-4F27-98BB-95AB88016C22'),
}

model ListQueuesResponse = {
  headers?: map[string]string(name='headers'),
  statusCode?: int32(name='statusCode'),
  body?: ListQueuesResponseBody(name='body'),
}

/**
 * @summary Queries the queues of a specified cluster.
 *
 * @param request ListQueuesRequest
 * @param runtime runtime options for this request RuntimeOptions
 * @return ListQueuesResponse
 */
async function listQueuesWithOptions(request: ListQueuesRequest, runtime: $RuntimeOptions): ListQueuesResponse {
  request.validate();
  var query = OpenApiUtil.query(request.toMap());
  var req = new OpenApiUtil.OpenApiRequest{ 
    query = OpenApiUtil.query(query),
  };
  var params = new OpenApiUtil.Params{
    action = 'ListQueues',
    version = '2018-04-12',
    protocol = 'HTTPS',
    pathname = '/',
    method = 'GET',
    authType = 'AK',
    style = 'RPC',
    reqBodyType = 'formData',
    bodyType = 'json',
  };
  return callApi(params, req, runtime);
}

/**
 * @summary Queries the queues of a specified cluster.
 *
 * @param request ListQueuesRequest
 * @return ListQueuesResponse
 */
async function listQueues(request: ListQueuesRequest): ListQueuesResponse {
  var runtime = new $RuntimeOptions{};
  return listQueuesWithOptions(request, runtime);
}

model ListRegionsResponseBody = {
  regions?: {
    regionInfo?: [ 
    {
      localName?: string(name='LocalName', description='The name of the region.', example='China East 1 (Hangzhou)'),
      regionId?: string(name='RegionId', description='The region ID.', example='cn-hangzhou'),
    }
  ](name='RegionInfo')
  }(name='Regions', description='The list of regions.'),
  requestId?: string(name='RequestId', description='The request ID.', example='04F0F334-1335-436C-A1D7-6C044FE73368'),
}

model ListRegionsResponse = {
  headers?: map[string]string(name='headers'),
  statusCode?: int32(name='statusCode'),
  body?: ListRegionsResponseBody(name='body'),
}

/**
 * @summary Queries a list of regions where Elastic High Performance Computing (E-HPC) is supported.
 *
 * @param request ListRegionsRequest
 * @param runtime runtime options for this request RuntimeOptions
 * @return ListRegionsResponse
 */
async function listRegionsWithOptions(runtime: $RuntimeOptions): ListRegionsResponse {
  var req = new OpenApiUtil.OpenApiRequest{};
  var params = new OpenApiUtil.Params{
    action = 'ListRegions',
    version = '2018-04-12',
    protocol = 'HTTPS',
    pathname = '/',
    method = 'GET',
    authType = 'AK',
    style = 'RPC',
    reqBodyType = 'formData',
    bodyType = 'json',
  };
  return callApi(params, req, runtime);
}

/**
 * @summary Queries a list of regions where Elastic High Performance Computing (E-HPC) is supported.
 *
 * @return ListRegionsResponse
 */
async function listRegions(): ListRegionsResponse {
  var runtime = new $RuntimeOptions{};
  return listRegionsWithOptions(runtime);
}

model ListSecurityGroupsRequest {
  clusterId?: string(name='ClusterId', description='The cluster ID.

This parameter is required.', example='ehpc-hz-FYUr32****'),
}

model ListSecurityGroupsResponseBody = {
  requestId?: string(name='RequestId', description='The request ID.', example='6D9A3378-61CA-4415-BEB0-1168C2A15975'),
  securityGroups?: {
    securityGroup?: [ string ](name='SecurityGroup')
  }(name='SecurityGroups', description='The security group ID.'),
  totalCount?: int32(name='TotalCount', description='The total number of security groups that are assigned to the E-HPC cluster.', example='1'),
}

model ListSecurityGroupsResponse = {
  headers?: map[string]string(name='headers'),
  statusCode?: int32(name='statusCode'),
  body?: ListSecurityGroupsResponseBody(name='body'),
}

/**
 * @summary Queries the security groups that are assigned to an E-HPC cluster.
 *
 * @param request ListSecurityGroupsRequest
 * @param runtime runtime options for this request RuntimeOptions
 * @return ListSecurityGroupsResponse
 */
async function listSecurityGroupsWithOptions(request: ListSecurityGroupsRequest, runtime: $RuntimeOptions): ListSecurityGroupsResponse {
  request.validate();
  var query = OpenApiUtil.query(request.toMap());
  var req = new OpenApiUtil.OpenApiRequest{ 
    query = OpenApiUtil.query(query),
  };
  var params = new OpenApiUtil.Params{
    action = 'ListSecurityGroups',
    version = '2018-04-12',
    protocol = 'HTTPS',
    pathname = '/',
    method = 'GET',
    authType = 'AK',
    style = 'RPC',
    reqBodyType = 'formData',
    bodyType = 'json',
  };
  return callApi(params, req, runtime);
}

/**
 * @summary Queries the security groups that are assigned to an E-HPC cluster.
 *
 * @param request ListSecurityGroupsRequest
 * @return ListSecurityGroupsResponse
 */
async function listSecurityGroups(request: ListSecurityGroupsRequest): ListSecurityGroupsResponse {
  var runtime = new $RuntimeOptions{};
  return listSecurityGroupsWithOptions(request, runtime);
}

model ListServerlessJobsRequest {
  clusterId?: string(name='ClusterId', description='The ID of the E-HPC cluster.

You can call the [ListClusters](https://help.aliyun.com/document_detail/87116.html) operation to query the cluster ID.

This parameter is required.', example='ehpc-hz-FYUr32****'),
  jobIds?: [ string ](name='JobIds', description='The list of serverless job IDs or subtask IDs (array jobs).'),
  jobNames?: [ string ](name='JobNames', description='The names of the serverless jobs.'),
  pageNumber?: long(name='PageNumber', description='The page number. Pages start from page 1. Default value: 1.', example='1'),
  pageSize?: long(name='PageSize', description='The number of entries per page. Maximum value: 100. Default value: 20.', example='20'),
  regionId?: string(name='RegionId', description='The region ID. You can call the [ListRegions](https://help.aliyun.com/document_detail/188593.html) operation to query the list of regions where E-HPC is supported.', example='cn-hangzhou'),
  startOrder?: string(name='StartOrder', description='Specifies whether to sort the serverless jobs by the job start time. Valid values:

*   Asc: ascending order.
*   Desc: descending order.', example='Asc'),
  state?: string(name='State', description='The status of the serverless job. Valid values:

*   All
*   Pending
*   Running
*   Succeeded
*   Canceled
*   Failed

Default value: All.', example='Running'),
  submitOrder?: string(name='SubmitOrder', description='Specifies whether to sort the serverless jobs by the job submission time. Valid values:

*   Asc: ascending order.
*   Desc: descending order.', example='asc'),
  submitTimeEnd?: string(name='SubmitTimeEnd', description='The latest time at which the job is submitted.

>  You can use this parameter to query the job list based on the job submission time.', example='1659521430'),
  submitTimeStart?: string(name='SubmitTimeStart', description='The earliest time at which the job is submitted.

>  You can use this parameter to query the job list based on the job submission time.', example='1647427667'),
}

model ListServerlessJobsResponseBody = {
  jobs?: [ 
    {
      endTime?: string(name='EndTime', description='The time at which the serverless job ended.', example='1682128871'),
      isArrayJob?: boolean(name='IsArrayJob', description='Indicates whether the job is an array job. Valid values:

*   True: yes
*   False: no', example='True'),
      jobId?: string(name='JobId', description='The ID of the serverless job or the subtask (array job).', example='5'),
      jobName?: string(name='JobName', description='The name of the serverless job.', example='testjob'),
      priority?: string(name='Priority', description='The scheduling priority of the serverless job. Valid values are 0 to 999. A greater value indicates a higher priority.', example='9'),
      queue?: string(name='Queue', description='The name of the queue in which the serverless job is run.', example='comp'),
      startTime?: string(name='StartTime', description='The time at which the serverless job started.', example='1647427667'),
      state?: string(name='State', description='The status of the serverless job. Valid values:

*   Pending
*   Initing
*   Running
*   Succeeded
*   Canceled
*   Failed', example='Running'),
      submitTime?: string(name='SubmitTime', description='The time at which the serverless job is submitted.', example='1647423718'),
      user?: string(name='User', description='The username that is used to run the serverless job.', example='testuser'),
    }
  ](name='Jobs', description='The list of serverless jobs.'),
  pageNumber?: long(name='PageNumber', description='The page number returned.', example='1'),
  pageSize?: long(name='PageSize', description='The number of entries returned per page.', example='20'),
  requestId?: string(name='RequestId', description='The request ID.', example='04F0F334-1335-436C-A1D7-6C044FE7****'),
  totalCount?: int32(name='TotalCount', description='The total number of entries returned.', example='1'),
}

model ListServerlessJobsResponse = {
  headers?: map[string]string(name='headers'),
  statusCode?: int32(name='statusCode'),
  body?: ListServerlessJobsResponseBody(name='body'),
}

/**
 * @summary Queries the list of serverless jobs based on filter conditions.
 *
 * @param request ListServerlessJobsRequest
 * @param runtime runtime options for this request RuntimeOptions
 * @return ListServerlessJobsResponse
 */
async function listServerlessJobsWithOptions(request: ListServerlessJobsRequest, runtime: $RuntimeOptions): ListServerlessJobsResponse {
  request.validate();
  var query = {};
  if (!$isNull(request.clusterId)) {
    query['ClusterId'] = request.clusterId;
  }
  if (!$isNull(request.jobIds)) {
    query['JobIds'] = request.jobIds;
  }
  if (!$isNull(request.jobNames)) {
    query['JobNames'] = request.jobNames;
  }
  if (!$isNull(request.pageNumber)) {
    query['PageNumber'] = request.pageNumber;
  }
  if (!$isNull(request.pageSize)) {
    query['PageSize'] = request.pageSize;
  }
  if (!$isNull(request.regionId)) {
    query['RegionId'] = request.regionId;
  }
  if (!$isNull(request.startOrder)) {
    query['StartOrder'] = request.startOrder;
  }
  if (!$isNull(request.state)) {
    query['State'] = request.state;
  }
  if (!$isNull(request.submitOrder)) {
    query['SubmitOrder'] = request.submitOrder;
  }
  if (!$isNull(request.submitTimeEnd)) {
    query['SubmitTimeEnd'] = request.submitTimeEnd;
  }
  if (!$isNull(request.submitTimeStart)) {
    query['SubmitTimeStart'] = request.submitTimeStart;
  }
  var req = new OpenApiUtil.OpenApiRequest{ 
    query = OpenApiUtil.query(query),
  };
  var params = new OpenApiUtil.Params{
    action = 'ListServerlessJobs',
    version = '2018-04-12',
    protocol = 'HTTPS',
    pathname = '/',
    method = 'POST',
    authType = 'AK',
    style = 'RPC',
    reqBodyType = 'formData',
    bodyType = 'json',
  };
  return callApi(params, req, runtime);
}

/**
 * @summary Queries the list of serverless jobs based on filter conditions.
 *
 * @param request ListServerlessJobsRequest
 * @return ListServerlessJobsResponse
 */
async function listServerlessJobs(request: ListServerlessJobsRequest): ListServerlessJobsResponse {
  var runtime = new $RuntimeOptions{};
  return listServerlessJobsWithOptions(request, runtime);
}

model ListSoftwaresRequest {
  ehpcVersion?: string(name='EhpcVersion', description='The version of the E-HPC client.

You can call the [ListCurrentClientVersion](https://help.aliyun.com/document_detail/87223.html) operation to query the E-HPC client version.', example='1.0.0'),
  osTag?: string(name='OsTag', description='The image tag of the cluster.

You can use the [ListImages](https://help.aliyun.com/document_detail/87213.html) to query the image tag of the cluster.', example='CentOS_7.2_64'),
}

model ListSoftwaresResponseBody = {
  requestId?: string(name='RequestId', description='The ID of the request.', example='04F0F334-1335-436C-A1D7-6C044FE7****'),
  softwares?: {
    softwareInfo?: [ 
    {
      accountType?: string(name='AccountType', description='The service type of the domain account. Valid values:

*   nis
*   ldap', example='nis'),
      accountVersion?: string(name='AccountVersion', description='The version of the domain account service.', example='2.31'),
      applications?: {
        applicationInfo?: [ 
        {
          name?: string(name='Name', description='The name of the software.', example='cudnnt'),
          required?: boolean(name='Required', description='Indicates whether the software is required. Valid values:

*   false: optional
*   true: required', example='true'),
          tag?: string(name='Tag', description='The tag of the software.', example='CUDNN_9.0'),
          version?: string(name='Version', description='The version of the software.', example='9.0'),
        }
      ](name='ApplicationInfo')
      }(name='Applications', description='The list of the software in the cluster.'),
      ehpcVersion?: string(name='EhpcVersion', description='The version of the E-HPC client.', example='1.0.0'),
      osTag?: string(name='OsTag', description='The image tag of the cluster.', example='CentOS_7.2_64'),
      schedulerType?: string(name='SchedulerType', description='The type of the scheduler. Valid values:

*   pbs
*   pbs19
*   slurm
*   slurm19
*   slurm20
*   opengridscheduler
*   deadline
*   gridengine
*   cube
*   custom', example='pbs'),
      schedulerVersion?: string(name='SchedulerVersion', description='The version of the scheduler.', example='18.1.1'),
    }
  ](name='SoftwareInfo')
  }(name='Softwares', description='The list of the information about the software installed in the cluster.'),
}

model ListSoftwaresResponse = {
  headers?: map[string]string(name='headers'),
  statusCode?: int32(name='statusCode'),
  body?: ListSoftwaresResponseBody(name='body'),
}

/**
 * @summary Queries the list of software that can be installed in a cluster.
 *
 * @param request ListSoftwaresRequest
 * @param runtime runtime options for this request RuntimeOptions
 * @return ListSoftwaresResponse
 */
async function listSoftwaresWithOptions(request: ListSoftwaresRequest, runtime: $RuntimeOptions): ListSoftwaresResponse {
  request.validate();
  var query = OpenApiUtil.query(request.toMap());
  var req = new OpenApiUtil.OpenApiRequest{ 
    query = OpenApiUtil.query(query),
  };
  var params = new OpenApiUtil.Params{
    action = 'ListSoftwares',
    version = '2018-04-12',
    protocol = 'HTTPS',
    pathname = '/',
    method = 'GET',
    authType = 'AK',
    style = 'RPC',
    reqBodyType = 'formData',
    bodyType = 'json',
  };
  return callApi(params, req, runtime);
}

/**
 * @summary Queries the list of software that can be installed in a cluster.
 *
 * @param request ListSoftwaresRequest
 * @return ListSoftwaresResponse
 */
async function listSoftwares(request: ListSoftwaresRequest): ListSoftwaresResponse {
  var runtime = new $RuntimeOptions{};
  return listSoftwaresWithOptions(request, runtime);
}

model ListTagResourcesRequest {
  nextToken?: string(name='NextToken', description='The token used to start the next query.', example='caeba0bbb2be03f84eb48b699f0axxxx'),
  regionId?: string(name='RegionId', description='The region ID of the resource.

This parameter is required.', example='cn-hangzhou'),
  resourceId?: [ string ](name='ResourceId', description='The resource IDs. You can specify up to 50 IDs.'),
  resourceType?: string(name='ResourceType', description='The resource type. Set the value to cluster, which indicates E-HPC clusters.

This parameter is required.', example='cluster'),
  tag?: [ 
    {
      key?: string(name='Key', description='The tag key.', example='TestKey'),
      value?: string(name='Value', description='The tag value.', example='TestValue'),
    }
  ](name='Tag', description='The resource tags. You can specify up to 20 tags.'),
}

model ListTagResourcesResponseBody = {
  nextToken?: string(name='NextToken', description='The token that is required for the next query. If the NextToken parameter is empty, no subsequent query is available.', example='caeba0bbb2be03f84eb48b699f0axxxx'),
  requestId?: string(name='RequestId', description='The request ID.', example='484256DA-D816-44D2-9D86-B6EE4D5BA78C'),
  tagResources?: {
    tagResource?: [ 
    {
      resourceId?: string(name='ResourceId', description='The resource ID. Set the value to the ID of the cluster.', example='ehpc-hz-xxxx'),
      resourceType?: string(name='ResourceType', description='The type of the resource whose tags are queried. Set the value to cluster, which indicates E-HPC clusters.', example='cluster'),
      tagKey?: string(name='TagKey', description='The tag key.', example='TestKey'),
      tagValue?: string(name='TagValue', description='The tag value.', example='TestValue'),
    }
  ](name='TagResource')
  }(name='TagResources', description='The tags.'),
}

model ListTagResourcesResponse = {
  headers?: map[string]string(name='headers'),
  statusCode?: int32(name='statusCode'),
  body?: ListTagResourcesResponseBody(name='body'),
}

/**
 * @summary Queries the tags that are attached to a specified resource.
 *
 * @param request ListTagResourcesRequest
 * @param runtime runtime options for this request RuntimeOptions
 * @return ListTagResourcesResponse
 */
async function listTagResourcesWithOptions(request: ListTagResourcesRequest, runtime: $RuntimeOptions): ListTagResourcesResponse {
  request.validate();
  var query = {};
  if (!$isNull(request.nextToken)) {
    query['NextToken'] = request.nextToken;
  }
  if (!$isNull(request.regionId)) {
    query['RegionId'] = request.regionId;
  }
  if (!$isNull(request.resourceId)) {
    query['ResourceId'] = request.resourceId;
  }
  if (!$isNull(request.resourceType)) {
    query['ResourceType'] = request.resourceType;
  }
  if (!$isNull(request.tag)) {
    query['Tag'] = request.tag;
  }
  var req = new OpenApiUtil.OpenApiRequest{ 
    query = OpenApiUtil.query(query),
  };
  var params = new OpenApiUtil.Params{
    action = 'ListTagResources',
    version = '2018-04-12',
    protocol = 'HTTPS',
    pathname = '/',
    method = 'POST',
    authType = 'AK',
    style = 'RPC',
    reqBodyType = 'formData',
    bodyType = 'json',
  };
  return callApi(params, req, runtime);
}

/**
 * @summary Queries the tags that are attached to a specified resource.
 *
 * @param request ListTagResourcesRequest
 * @return ListTagResourcesResponse
 */
async function listTagResources(request: ListTagResourcesRequest): ListTagResourcesResponse {
  var runtime = new $RuntimeOptions{};
  return listTagResourcesWithOptions(request, runtime);
}

model ListTasksRequest {
  archived?: boolean(name='Archived', description='Specifies whether to display the response history of the asynchronous API operation. Valid values:

*   true: displays the current response and response history of the asynchronous API operation.
*   false: displays only the current response of the asynchronous API operation. If no tasks are running, `[]` is returned.

Default value: false.

>  If you specify the TaskId parameter, the Archived parameter is invalid.', example='false'),
  clusterId?: string(name='ClusterId', description='The cluster ID.

You can call the [ListClusters](https://help.aliyun.com/document_detail/87116.html) operation to query the cluster ID.

This parameter is required.', example='ehpc-hz-FYUr32****'),
  pageNumber?: int32(name='PageNumber', description='The page number. Pages start from page 1. Valid values: 1 to 999.', example='1'),
  pageSize?: int32(name='PageSize', description='The number of entries per page. Valid values: 1 to 50.

Default value: 10.', example='10'),
  taskId?: string(name='TaskId', description='The task ID. You can call the following asynchronous API operations to obtain the task ID.

*   [CreateCluster](https://help.aliyun.com/document_detail/87100.html)
*   [StartCluster](https://help.aliyun.com/document_detail/200345.html)
*   [StopCluster](https://help.aliyun.com/document_detail/200346.html)
*   [DeleteCluster](https://help.aliyun.com/document_detail/87110.html)
*   [AddNodes](https://help.aliyun.com/document_detail/87147.html)
*   [StartNodes](https://help.aliyun.com/document_detail/87159.html)
*   [ResetNodes](https://help.aliyun.com/document_detail/87158.html)
*   [StopNodes](https://help.aliyun.com/document_detail/87160.html)
*   [DeleteNodes](https://help.aliyun.com/document_detail/87155.html)', example='B745C159-3155-4B94-95D0-4B73D4D2****'),
}

model ListTasksResponseBody = {
  pageNumber?: int32(name='PageNumber', description='The page number.', example='1'),
  pageSize?: int32(name='PageSize', description='The number of entries per page.', example='10'),
  requestId?: string(name='RequestId', description='The request ID.', example='89A1AC0F-4A6C-4F3D-98F9-BEF9A823****'),
  tasks?: [ 
    {
      clusterId?: string(name='ClusterId', description='The cluster ID.', example='ehpc-hz-FYUr32****'),
      currentStep?: int32(name='CurrentStep', description='The current step of the task.', example='16'),
      errors?: string(name='Errors', description='The error messages returned for the task.

You can view the error messages and the corresponding solutions in the [Error Center](https://error-center.alibabacloud.com/status/product/EHPC).', example='[]'),
      request?: string(name='Request', description='The request parameters of the task. The value is a JSON string.', example='{\\\\"requestId\\\\":\\\\"0A6CA33E-BFBF-4F92-BDAE-4E8860DA****\\\\",\\\\"uid\\\\":\\\\"160998252992****\\\\",\\\\"bid\\\\":\\\\"268**\\\\",\\\\"clusterId\\\\":\\\\"ehpc-hz-ysQtcZ****\\\\"}'),
      result?: string(name='Result', description='The result of the task. Valid values:

*   If you set TaskType to CreateCluster or AddComputes, the value of this parameter is in the `{\\\\"Instances\\\\":[]}` format. The value indicates the information about the nodes that are added to the cluster.
*   If you set TaskType to a value other than CreateCluster and AddComputes, the value of this parameter is in the `{}` format.', example='{\\\\"Instances\\\\":[{\\\\"InstanceId\\\\":\\\\"i-bp1inb1j2xz8pnoi****\\\\",\\\\"Ip\\\\":\\\\"192.168.*.*\\\\",\\\\"Hostname\\\\":\\\\"login0\\\\",\\\\"role\\\\":\\\\"login\\\\"}]}'),
      status?: string(name='Status', description='The status of the task. Valid values:

*   Processing: The task is running.
*   Success: The task succeeded.
*   Failed: The task failed.
*   PartialFail: The task partially failed.', example='Processing'),
      taskId?: string(name='TaskId', description='The task ID.', example='B745C159-3155-4B94-95D0-4B73D4D2****'),
      taskType?: string(name='TaskType', description='The task type. Valid values:

*   CreateCluster: creates a cluster by calling the [CreateCluster](https://help.aliyun.com/document_detail/87100.html) operation.
*   StartCluster: starts a cluster by calling the [StartCluster](https://help.aliyun.com/document_detail/200345.html) operation.
*   StopCluster: stops a cluster by calling the [StopCluster](https://help.aliyun.com/document_detail/200346.html) operation.
*   DeleteCluster: releases a cluster by calling the [DeleteCluster](https://help.aliyun.com/document_detail/87110.html) operation.
*   AddComputes: adds nodes to a cluster by calling the [AddNodes](https://help.aliyun.com/document_detail/87147.html) operation.
*   StartComputes: starts nodes by calling the [StartNodes](https://help.aliyun.com/document_detail/87159.html) operation.
*   ResetCompute: resets nodes by calling the [ResetNodes](https://help.aliyun.com/document_detail/87158.html) operation.
*   StopComputes: stops nodes by calling the [StopNodes](https://help.aliyun.com/document_detail/87160.html) operation.
*   DeleteComputes: deletes nodes by calling the [DeleteNodes](https://help.aliyun.com/document_detail/87155.html) operation.', example='StopCluster'),
      totalSteps?: int32(name='TotalSteps', description='The total number of steps of the task.', example='35'),
    }
  ](name='Tasks', description='The queried tasks.'),
  totalCount?: int32(name='TotalCount', description='The total number of entries returned.', example='10'),
}

model ListTasksResponse = {
  headers?: map[string]string(name='headers'),
  statusCode?: int32(name='statusCode'),
  body?: ListTasksResponseBody(name='body'),
}

/**
 * @summary Queries the response of an asynchronous API operation for a cluster.
 *
 * @description For some asynchronous API operations such as AddNodes, the system immediately returns a result without waiting for the node to be created if the request succeeds. In this case, you can use the TaskId returned by the asynchronous API operation to query the result of the task.
 *
 * @param request ListTasksRequest
 * @param runtime runtime options for this request RuntimeOptions
 * @return ListTasksResponse
 */
async function listTasksWithOptions(request: ListTasksRequest, runtime: $RuntimeOptions): ListTasksResponse {
  request.validate();
  var query = OpenApiUtil.query(request.toMap());
  var req = new OpenApiUtil.OpenApiRequest{ 
    query = OpenApiUtil.query(query),
  };
  var params = new OpenApiUtil.Params{
    action = 'ListTasks',
    version = '2018-04-12',
    protocol = 'HTTPS',
    pathname = '/',
    method = 'GET',
    authType = 'AK',
    style = 'RPC',
    reqBodyType = 'formData',
    bodyType = 'json',
  };
  return callApi(params, req, runtime);
}

/**
 * @summary Queries the response of an asynchronous API operation for a cluster.
 *
 * @description For some asynchronous API operations such as AddNodes, the system immediately returns a result without waiting for the node to be created if the request succeeds. In this case, you can use the TaskId returned by the asynchronous API operation to query the result of the task.
 *
 * @param request ListTasksRequest
 * @return ListTasksResponse
 */
async function listTasks(request: ListTasksRequest): ListTasksResponse {
  var runtime = new $RuntimeOptions{};
  return listTasksWithOptions(request, runtime);
}

model ListUpgradeClientsRequest {
  clusterId?: string(name='ClusterId', description='The cluster ID.

This parameter is required.', example='ehpc-hz-FYUr32****'),
  regionId?: string(name='RegionId', description='The region ID.

This parameter is required.', example='cn-hangzhou'),
}

model ListUpgradeClientsResponseBody = {
  clientRecords?: [ 
    {
      newVersion?: string(name='NewVersion', description='The version of ehpcutil after the update.', example='1.2.21'),
      oldVersion?: string(name='OldVersion', description='The version of ehpcutil before the update.', example='1.2.16'),
      subUid?: string(name='SubUid', description='The user ID (UID) whose ehpcutil is updated.', example='129******84'),
      updateTime?: string(name='UpdateTime', description='The update time.', example='2022-08-26T06:26:57.000Z'),
    }
  ](name='ClientRecords', description='The update records of ehpcutil in the cluster.'),
  currentVersion?: string(name='CurrentVersion', description='The current version of ehpcutil in the cluster.', example='1.2.21'),
  latestVersion?: string(name='LatestVersion', description='The latest version of ehpcutil that is released.', example='1.2.22'),
  requestId?: string(name='RequestId', description='The request ID.', example='89A1AC0F-4A6C-4F3D-98F9-BEF9A823****'),
}

model ListUpgradeClientsResponse = {
  headers?: map[string]string(name='headers'),
  statusCode?: int32(name='statusCode'),
  body?: ListUpgradeClientsResponseBody(name='body'),
}

/**
 * @summary Queries the latest version to which the client (ehpcutil) in a cluster can be updated and historical update records of the client.
 *
 * @param request ListUpgradeClientsRequest
 * @param runtime runtime options for this request RuntimeOptions
 * @return ListUpgradeClientsResponse
 */
async function listUpgradeClientsWithOptions(request: ListUpgradeClientsRequest, runtime: $RuntimeOptions): ListUpgradeClientsResponse {
  request.validate();
  var query = OpenApiUtil.query(request.toMap());
  var req = new OpenApiUtil.OpenApiRequest{ 
    query = OpenApiUtil.query(query),
  };
  var params = new OpenApiUtil.Params{
    action = 'ListUpgradeClients',
    version = '2018-04-12',
    protocol = 'HTTPS',
    pathname = '/',
    method = 'GET',
    authType = 'AK',
    style = 'RPC',
    reqBodyType = 'formData',
    bodyType = 'json',
  };
  return callApi(params, req, runtime);
}

/**
 * @summary Queries the latest version to which the client (ehpcutil) in a cluster can be updated and historical update records of the client.
 *
 * @param request ListUpgradeClientsRequest
 * @return ListUpgradeClientsResponse
 */
async function listUpgradeClients(request: ListUpgradeClientsRequest): ListUpgradeClientsResponse {
  var runtime = new $RuntimeOptions{};
  return listUpgradeClientsWithOptions(request, runtime);
}

model ListUsersRequest {
  clusterId?: string(name='ClusterId', description='The ID of the E-HPC cluster.

You can call the [ListClusters](https://help.aliyun.com/document_detail/87116.html) operation to query the cluster ID.

This parameter is required.', example='ehpc-hz-FYUr32****'),
  pageNumber?: int32(name='PageNumber', description='The page number of the page to return.

Pages start from page 1.

Default value: 1.', example='1'),
  pageSize?: int32(name='PageSize', description='The number of entries to return on each page. Valid values: 1 to 50.

Default value: 10.', example='10'),
}

model ListUsersResponseBody = {
  pageNumber?: int32(name='PageNumber', description='The page number returned.', example='1'),
  pageSize?: int32(name='PageSize', description='The number of entries returned per page.', example='1'),
  requestId?: string(name='RequestId', description='The request ID.', example='04F0F334-1335-436C-A1D7-6C044FE7****'),
  totalCount?: int32(name='TotalCount', description='The total number of returned entries.', example='1'),
  users?: {
    userInfo?: [ 
    {
      addTime?: string(name='AddTime', description='The time when the user was created.', example='2018-07-18T17:46:47'),
      group?: string(name='Group', description='The name of the permission group. Valid values:

*   users: an ordinary permission group. It is applicable to ordinary users that need only to submit and debug jobs.
*   wheel: a sudo permission group. It is applicable to the administrator who needs to manage the cluster. In addition to submitting and debugging jobs, users who have sudo permissions can run sudo commands to install software and restart nodes.', example='wheel'),
      name?: string(name='Name', description='The username of the account.', example='user1'),
    }
  ](name='UserInfo')
  }(name='Users', description='The list of users.'),
}

model ListUsersResponse = {
  headers?: map[string]string(name='headers'),
  statusCode?: int32(name='statusCode'),
  body?: ListUsersResponseBody(name='body'),
}

/**
 * @summary Queries all users of a cluster.
 *
 * @param request ListUsersRequest
 * @param runtime runtime options for this request RuntimeOptions
 * @return ListUsersResponse
 */
async function listUsersWithOptions(request: ListUsersRequest, runtime: $RuntimeOptions): ListUsersResponse {
  request.validate();
  var query = OpenApiUtil.query(request.toMap());
  var req = new OpenApiUtil.OpenApiRequest{ 
    query = OpenApiUtil.query(query),
  };
  var params = new OpenApiUtil.Params{
    action = 'ListUsers',
    version = '2018-04-12',
    protocol = 'HTTPS',
    pathname = '/',
    method = 'GET',
    authType = 'AK',
    style = 'RPC',
    reqBodyType = 'formData',
    bodyType = 'json',
  };
  return callApi(params, req, runtime);
}

/**
 * @summary Queries all users of a cluster.
 *
 * @param request ListUsersRequest
 * @return ListUsersResponse
 */
async function listUsers(request: ListUsersRequest): ListUsersResponse {
  var runtime = new $RuntimeOptions{};
  return listUsersWithOptions(request, runtime);
}

model ListUsersAsyncRequest {
  asyncId?: string(name='AsyncId', description='The ID of the asynchronous task.', example='t-hz02xltxaex1q80'),
  clusterId?: string(name='ClusterId', description='The ID of the E-HPC cluster. You can call the [ListClusters](https://help.aliyun.com/document_detail/87116.html) operation to query the cluster ID.

This parameter is required.', example='ehpc-hz-vu7c2WkVGx'),
  pageNumber?: int32(name='PageNumber', description='The page number.\\\\
Pages start from page 1.\\\\
Default value: 1.', example='1'),
  pageSize?: int32(name='PageSize', description='The number of entries returned per page.\\\\
Valid values: 1 to 50.\\\\
Default value: 10.', example='10'),
}

model ListUsersAsyncResponseBody = {
  asyncId?: string(name='AsyncId', description='The ID of the asynchronous task.', example='t-sh03egi3mls****'),
  asyncStatus?: string(name='AsyncStatus', description='The status of the asynchronous task.', example='Success'),
  pageNumber?: int32(name='PageNumber', description='The number of the page returned. Pages start from page 1.', example='1'),
  pageSize?: int32(name='PageSize', description='The number of entries returned per page.', example='10'),
  requestId?: string(name='RequestId', description='The request ID.', example='9A05F620-ED46-4A57-95F1-C67D6D3C5DD2'),
  totalCount?: int32(name='TotalCount', description='The total number of users.', example='1'),
  users?: {
    userInfo?: [ 
    {
      addTime?: string(name='AddTime', description='The time when the user was created.', example='2022-09-28T09:05:26.000Z'),
      group?: string(name='Group', description='The user groups.', example='wheel'),
      groupId?: string(name='GroupId', description='The user group ID.', example='10'),
      name?: string(name='Name', description='The username of the account.', example='testuser'),
      userId?: string(name='UserId', description='The user ID.', example='1000'),
    }
  ](name='UserInfo')
  }(name='Users', description='The list of users.'),
}

model ListUsersAsyncResponse = {
  headers?: map[string]string(name='headers'),
  statusCode?: int32(name='statusCode'),
  body?: ListUsersAsyncResponseBody(name='body'),
}

/**
 * @summary Queries the users in a cluster.
 *
 * @param request ListUsersAsyncRequest
 * @param runtime runtime options for this request RuntimeOptions
 * @return ListUsersAsyncResponse
 */
async function listUsersAsyncWithOptions(request: ListUsersAsyncRequest, runtime: $RuntimeOptions): ListUsersAsyncResponse {
  request.validate();
  var query = OpenApiUtil.query(request.toMap());
  var req = new OpenApiUtil.OpenApiRequest{ 
    query = OpenApiUtil.query(query),
  };
  var params = new OpenApiUtil.Params{
    action = 'ListUsersAsync',
    version = '2018-04-12',
    protocol = 'HTTPS',
    pathname = '/',
    method = 'GET',
    authType = 'AK',
    style = 'RPC',
    reqBodyType = 'formData',
    bodyType = 'json',
  };
  return callApi(params, req, runtime);
}

/**
 * @summary Queries the users in a cluster.
 *
 * @param request ListUsersAsyncRequest
 * @return ListUsersAsyncResponse
 */
async function listUsersAsync(request: ListUsersAsyncRequest): ListUsersAsyncResponse {
  var runtime = new $RuntimeOptions{};
  return listUsersAsyncWithOptions(request, runtime);
}

model ListVolumesRequest {
  pageNumber?: int32(name='PageNumber', description='The page number of the page to return.

Pages start from page 1.

Default value: 1.', example='1'),
  pageSize?: int32(name='PageSize', description='The number of entries to return on each page. Valid values: 1 to 50.

Default value: 10.', example='10'),
}

model ListVolumesResponseBody = {
  pageNumber?: int32(name='PageNumber', description='The page number.', example='1'),
  pageSize?: int32(name='PageSize', description='The number of entries returned per page.', example='1'),
  requestId?: string(name='RequestId', description='The request ID.', example='04F0F334-1335-436C-A1D7-6C044FE73368'),
  totalCount?: int32(name='TotalCount', description='The total number of returned entries.', example='1'),
  volumes?: {
    volumeInfo?: [ 
    {
      additionalVolumes?: {
        volumeInfo?: [ 
        {
          jobQueue?: string(name='JobQueue', description='The queue to which the job belongs.', example='all.q'),
          localDirectory?: string(name='LocalDirectory', description='The local mount directory.', example='/testopt'),
          location?: string(name='Location', description='The location where the cluster is deployed. Valid values:

*   OnPremise: The node is deployed on a hybrid cloud.
*   PublicCloud: The cluster is deployed on a public cloud.', example='PublicCloud'),
          remoteDirectory?: string(name='RemoteDirectory', description='The remote directory on which the file system is mounted.', example='/test'),
          role?: string(name='Role', description='The type of the node on which the file system is mounted. Valid values:

*   Manager: management node
*   Login: logon node
*   Compute: compute node', example='Compute'),
          volumeId?: string(name='VolumeId', description='The ID of the file system.', example='86y3****'),
          volumeMountpoint?: string(name='VolumeMountpoint', description='The domain name of the mount target.', example='86y3****-rgd51.cn-hangzhou.nas.aliyuncs.com'),
          volumeProtocol?: string(name='VolumeProtocol', description='The type of the storage protocol. Valid values:

*   NFS
*   SMB', example='NFS'),
          volumeType?: string(name='VolumeType', description='The type of the additional file system. Only NAS is supported.', example='NAS'),
        }
      ](name='VolumeInfo')
      }(name='AdditionalVolumes', description='The information of additional file systems mounted on E-HPC clusters.'),
      clusterId?: string(name='ClusterId', description='The cluster ID.', example='ehpc-hz-FYUr32****'),
      clusterName?: string(name='ClusterName', description='The instance name.', example='cluster1'),
      regionId?: string(name='RegionId', description='The region ID.', example='cn-hangzhou'),
      remoteDirectory?: string(name='RemoteDirectory', description='The remote directory on which the file system is mounted.', example='/test1'),
      volumeId?: string(name='VolumeId', description='The ID of the file system.', example='bc8a****'),
      volumeMountpoint?: string(name='VolumeMountpoint', description='The domain name of the mount target.', example='bc8a****-rgd51.cn-hangzhou.nas.aliyuncs.com'),
      volumeProtocol?: string(name='VolumeProtocol', description='The type of the storage protocol. Valid values:

*   NFS
*   SMB', example='NFS'),
      volumeType?: string(name='VolumeType', description='The type of the file system that is mounted on the cluster. Only NAS is supported.', example='NAS'),
    }
  ](name='VolumeInfo')
  }(name='Volumes', description='The information of file systems that are mounted on E-HPC clusters.'),
}

model ListVolumesResponse = {
  headers?: map[string]string(name='headers'),
  statusCode?: int32(name='statusCode'),
  body?: ListVolumesResponseBody(name='body'),
}

/**
 * @summary Queries the file systems mounted on Elastic High Performance Computing (E-HPC) clusters.
 *
 * @param request ListVolumesRequest
 * @param runtime runtime options for this request RuntimeOptions
 * @return ListVolumesResponse
 */
async function listVolumesWithOptions(request: ListVolumesRequest, runtime: $RuntimeOptions): ListVolumesResponse {
  request.validate();
  var query = OpenApiUtil.query(request.toMap());
  var req = new OpenApiUtil.OpenApiRequest{ 
    query = OpenApiUtil.query(query),
  };
  var params = new OpenApiUtil.Params{
    action = 'ListVolumes',
    version = '2018-04-12',
    protocol = 'HTTPS',
    pathname = '/',
    method = 'GET',
    authType = 'AK',
    style = 'RPC',
    reqBodyType = 'formData',
    bodyType = 'json',
  };
  return callApi(params, req, runtime);
}

/**
 * @summary Queries the file systems mounted on Elastic High Performance Computing (E-HPC) clusters.
 *
 * @param request ListVolumesRequest
 * @return ListVolumesResponse
 */
async function listVolumes(request: ListVolumesRequest): ListVolumesResponse {
  var runtime = new $RuntimeOptions{};
  return listVolumesWithOptions(request, runtime);
}

model ModifyClusterAttributesRequest {
  clusterId?: string(name='ClusterId', description='The ID of the cluster that you want to modify.

This parameter is required.', example='ehpc-hz-FYUr32****'),
  description?: string(name='Description', description='The new cluster description.', example='test-description'),
  imageId?: string(name='ImageId', description='The IDs of the images.', example='centos_7_06_64_20G_alibase_2019071****'),
  imageOwnerAlias?: string(name='ImageOwnerAlias', description='The new image type of the cluster. Valid values:

*   system: public image
*   self: custom image
*   others: shared image
*   marketplace: Alibaba Cloud Marketplace image', example='self'),
  name?: string(name='Name', description='The new cluster name.', example='cluster1'),
  ramNodeTypes?: [ string ](name='RamNodeTypes', description='The type of the node to which you want to bind the RAM role.'),
  ramRoleName?: string(name='RamRoleName', description='The name of the instance RAM role.', example='testRamRoleName'),
  winAdPar?: {
    adDc?: string(name='AdDc', description='The domain name of the Windows AD server.', example='ehpcad.com'),
    adIp?: string(name='AdIp', description='The IP address of the Windows AD server.', example='192.168.1.2'),
    adUser?: string(name='AdUser', description='The Windows AD server administrator.', example='administrator'),
    adUserPasswd?: string(name='AdUserPasswd', description='The administrator password of the Windows AD server.', example='xxxxxxx'),
    fallbackHomeDir?: string(name='FallbackHomeDir', description='The home directory of the Linux server.', example='/home'),
  }(name='WinAdPar', description='The parameters that are used to connect to the Windows AD server.'),
}

model ModifyClusterAttributesResponseBody = {
  requestId?: string(name='RequestId', description='The request ID.', example='04F0F334-1335-436C-A1D7-6C044FE7336'),
}

model ModifyClusterAttributesResponse = {
  headers?: map[string]string(name='headers'),
  statusCode?: int32(name='statusCode'),
  body?: ModifyClusterAttributesResponseBody(name='body'),
}

/**
 * @summary Modifies the basic information of a cluster, including the name, description, and image.
 *
 * @description ## Usage notes
 * Before you call this operation, you can call the [DescribeCluster](https://help.aliyun.com/document_detail/87126.html) operation to query details of the selected cluster.
 *
 * @param request ModifyClusterAttributesRequest
 * @param runtime runtime options for this request RuntimeOptions
 * @return ModifyClusterAttributesResponse
 */
async function modifyClusterAttributesWithOptions(request: ModifyClusterAttributesRequest, runtime: $RuntimeOptions): ModifyClusterAttributesResponse {
  request.validate();
  var query = OpenApiUtil.query(request.toMap());
  var req = new OpenApiUtil.OpenApiRequest{ 
    query = OpenApiUtil.query(query),
  };
  var params = new OpenApiUtil.Params{
    action = 'ModifyClusterAttributes',
    version = '2018-04-12',
    protocol = 'HTTPS',
    pathname = '/',
    method = 'GET',
    authType = 'AK',
    style = 'RPC',
    reqBodyType = 'formData',
    bodyType = 'json',
  };
  return callApi(params, req, runtime);
}

/**
 * @summary Modifies the basic information of a cluster, including the name, description, and image.
 *
 * @description ## Usage notes
 * Before you call this operation, you can call the [DescribeCluster](https://help.aliyun.com/document_detail/87126.html) operation to query details of the selected cluster.
 *
 * @param request ModifyClusterAttributesRequest
 * @return ModifyClusterAttributesResponse
 */
async function modifyClusterAttributes(request: ModifyClusterAttributesRequest): ModifyClusterAttributesResponse {
  var runtime = new $RuntimeOptions{};
  return modifyClusterAttributesWithOptions(request, runtime);
}

model ModifyUserGroupsRequest {
  async?: boolean(name='Async', description='Specifies whether to use asynchronous message links to change the user group.

Default value: false.', example='false'),
  clusterId?: string(name='ClusterId', description='The cluster ID.

You can call the [ListClusters](https://help.aliyun.com/document_detail/87116.html) operation to obtain the cluster ID.

This parameter is required.', example='ehpc-hz-FYUr32****'),
  user?: [ 
    {
      group?: string(name='Group', description='The user group to be changed. Valid values:

*   users: ordinary permissions, which are suitable for ordinary users that need only to submit and debug jobs.
*   wheel: sudo permissions, which are suitable for administrators who need to manage clusters. In addition to submitting and debugging jobs, you can also run sudo commands to install software and restart nodes.', example='users'),
      name?: string(name='Name', description='The username.

You can call the [ListUsers](https://help.aliyun.com/document_detail/188572.html) operation to query the usernames in the cluster.', example='user11'),
    }
  ](name='User', description='The users. You can specify 1 to 100 users.

This parameter is required.'),
}

model ModifyUserGroupsResponseBody = {
  requestId?: string(name='RequestId', description='The ID of the request.', example='04F0F334-1335-436C-A1D7-6C044FE7****'),
}

model ModifyUserGroupsResponse = {
  headers?: map[string]string(name='headers'),
  statusCode?: int32(name='statusCode'),
  body?: ModifyUserGroupsResponseBody(name='body'),
}

/**
 * @summary Changes the user group to which users belong.
 *
 * @param request ModifyUserGroupsRequest
 * @param runtime runtime options for this request RuntimeOptions
 * @return ModifyUserGroupsResponse
 */
async function modifyUserGroupsWithOptions(request: ModifyUserGroupsRequest, runtime: $RuntimeOptions): ModifyUserGroupsResponse {
  request.validate();
  var query = OpenApiUtil.query(request.toMap());
  var req = new OpenApiUtil.OpenApiRequest{ 
    query = OpenApiUtil.query(query),
  };
  var params = new OpenApiUtil.Params{
    action = 'ModifyUserGroups',
    version = '2018-04-12',
    protocol = 'HTTPS',
    pathname = '/',
    method = 'GET',
    authType = 'AK',
    style = 'RPC',
    reqBodyType = 'formData',
    bodyType = 'json',
  };
  return callApi(params, req, runtime);
}

/**
 * @summary Changes the user group to which users belong.
 *
 * @param request ModifyUserGroupsRequest
 * @return ModifyUserGroupsResponse
 */
async function modifyUserGroups(request: ModifyUserGroupsRequest): ModifyUserGroupsResponse {
  var runtime = new $RuntimeOptions{};
  return modifyUserGroupsWithOptions(request, runtime);
}

model ModifyUserPasswordsRequest {
  async?: boolean(name='Async', description='Specifies whether to enable the asynchronous mode for this request.

Default value: false.', example='false'),
  clusterId?: string(name='ClusterId', description='The cluster ID.

You can call the [ListClusters](https://help.aliyun.com/document_detail/87116.html) operation to obtain the cluster ID.

This parameter is required.', example='ehpc-hz-FYUr32****'),
  user?: [ 
    {
      name?: string(name='Name', description='The username of the user whose password you want to change.

You can call the [ListUsers](https://help.aliyun.com/document_detail/188572.html) operation to query the usernames in the cluster.', example='user1'),
      password?: string(name='Password', description='The new password for the user. The password must be 8 to 30 characters in length and contain at least three of the following character types:

*   Uppercase letter
*   Lowercase letter
*   Digit
*   Special character: `()~!@#$%^&*-_+=|{}[]:;\\\\"/<>,.?/`

>  We recommend that you use HTTPS to call this operation to avoid password leaks.', example='1@a****'),
    }
  ](name='User', description='The users. You can specify 1 to 100 users.

This parameter is required.'),
}

model ModifyUserPasswordsResponseBody = {
  requestId?: string(name='RequestId', description='The ID of the request.', example='04F0F334-1335-436C-A1D7-6C044FE7****'),
}

model ModifyUserPasswordsResponse = {
  headers?: map[string]string(name='headers'),
  statusCode?: int32(name='statusCode'),
  body?: ModifyUserPasswordsResponseBody(name='body'),
}

/**
 * @summary Changes the passwords of users.
 *
 * @param request ModifyUserPasswordsRequest
 * @param runtime runtime options for this request RuntimeOptions
 * @return ModifyUserPasswordsResponse
 */
async function modifyUserPasswordsWithOptions(request: ModifyUserPasswordsRequest, runtime: $RuntimeOptions): ModifyUserPasswordsResponse {
  request.validate();
  var query = OpenApiUtil.query(request.toMap());
  var req = new OpenApiUtil.OpenApiRequest{ 
    query = OpenApiUtil.query(query),
  };
  var params = new OpenApiUtil.Params{
    action = 'ModifyUserPasswords',
    version = '2018-04-12',
    protocol = 'HTTPS',
    pathname = '/',
    method = 'GET',
    authType = 'AK',
    style = 'RPC',
    reqBodyType = 'formData',
    bodyType = 'json',
  };
  return callApi(params, req, runtime);
}

/**
 * @summary Changes the passwords of users.
 *
 * @param request ModifyUserPasswordsRequest
 * @return ModifyUserPasswordsResponse
 */
async function modifyUserPasswords(request: ModifyUserPasswordsRequest): ModifyUserPasswordsResponse {
  var runtime = new $RuntimeOptions{};
  return modifyUserPasswordsWithOptions(request, runtime);
}

model ModifyVisualServicePasswdRequest {
  clusterId?: string(name='ClusterId', description='The cluster ID.

You can call the [ListClusters](https://help.aliyun.com/document_detail/87116.html) operation to query the cluster ID.

This parameter is required.', example='ehpc-hz-jeJki6****'),
  passwd?: string(name='Passwd', description='The password that you can use to remotely connect to the visualization service over the VNC. The password must be 6 characters in length and must contain letters and digits.

>  You must call the API operation over HTTPS to ensure that the password remains confidential.

This parameter is required.', example='1254****'),
  runasUser?: string(name='RunasUser', description='The username of the cluster. Set the value to root.

This parameter is required.', example='root'),
  runasUserPassword?: string(name='RunasUserPassword', description='The password that corresponds to the username specified by RunasUser.

This parameter is required.', example='2145****'),
}

model ModifyVisualServicePasswdResponseBody = {
  message?: string(name='Message', description='The returned message.', example='Service started.'),
  requestId?: string(name='RequestId', description='The request ID.', example='896D338C-E4F4-41EC-A154-D605E5DE6880'),
}

model ModifyVisualServicePasswdResponse = {
  headers?: map[string]string(name='headers'),
  statusCode?: int32(name='statusCode'),
  body?: ModifyVisualServicePasswdResponseBody(name='body'),
}

/**
 * @summary Sets a password that you can use to remotely connect to a visualization service in a cluster over the virtual network console (VNC).
 *
 * @param request ModifyVisualServicePasswdRequest
 * @param runtime runtime options for this request RuntimeOptions
 * @return ModifyVisualServicePasswdResponse
 */
async function modifyVisualServicePasswdWithOptions(request: ModifyVisualServicePasswdRequest, runtime: $RuntimeOptions): ModifyVisualServicePasswdResponse {
  request.validate();
  var query = OpenApiUtil.query(request.toMap());
  var req = new OpenApiUtil.OpenApiRequest{ 
    query = OpenApiUtil.query(query),
  };
  var params = new OpenApiUtil.Params{
    action = 'ModifyVisualServicePasswd',
    version = '2018-04-12',
    protocol = 'HTTPS',
    pathname = '/',
    method = 'GET',
    authType = 'AK',
    style = 'RPC',
    reqBodyType = 'formData',
    bodyType = 'json',
  };
  return callApi(params, req, runtime);
}

/**
 * @summary Sets a password that you can use to remotely connect to a visualization service in a cluster over the virtual network console (VNC).
 *
 * @param request ModifyVisualServicePasswdRequest
 * @return ModifyVisualServicePasswdResponse
 */
async function modifyVisualServicePasswd(request: ModifyVisualServicePasswdRequest): ModifyVisualServicePasswdResponse {
  var runtime = new $RuntimeOptions{};
  return modifyVisualServicePasswdWithOptions(request, runtime);
}

model PullImageRequest {
  clusterId?: string(name='ClusterId', description='The ID of the cluster.

This parameter is required.', example='ehpc-hz-nkKsP3****'),
  containerType?: string(name='ContainerType', description='The type of the image. Default value: shifter.', example='shifter'),
  imageTag?: string(name='ImageTag', description='The tag of the image. Default value: latest.', example='latest'),
  repository?: string(name='Repository', description='The name of the repository.

This parameter is required.', example='centos'),
}

model PullImageResponseBody = {
  requestId?: string(name='RequestId', description='The ID of the request.', example='29d3d9Ee-8eCB-5013-A1c2-1CeD19C6CfFe'),
}

model PullImageResponse = {
  headers?: map[string]string(name='headers'),
  statusCode?: int32(name='statusCode'),
  body?: PullImageResponseBody(name='body'),
}

/**
 * @param request PullImageRequest
 * @param runtime runtime options for this request RuntimeOptions
 * @return PullImageResponse
 */
async function pullImageWithOptions(request: PullImageRequest, runtime: $RuntimeOptions): PullImageResponse {
  request.validate();
  var query = OpenApiUtil.query(request.toMap());
  var req = new OpenApiUtil.OpenApiRequest{ 
    query = OpenApiUtil.query(query),
  };
  var params = new OpenApiUtil.Params{
    action = 'PullImage',
    version = '2018-04-12',
    protocol = 'HTTPS',
    pathname = '/',
    method = 'GET',
    authType = 'AK',
    style = 'RPC',
    reqBodyType = 'formData',
    bodyType = 'json',
  };
  return callApi(params, req, runtime);
}

/**
 * @param request PullImageRequest
 * @return PullImageResponse
 */
async function pullImage(request: PullImageRequest): PullImageResponse {
  var runtime = new $RuntimeOptions{};
  return pullImageWithOptions(request, runtime);
}

model QueryServicePackAndPriceResponseBody = {
  chargeAmount?: int32(name='ChargeAmount', example='167'),
  currency?: string(name='Currency', example='CNY'),
  discountPrice?: float(name='DiscountPrice', example='0.418'),
  originalAmount?: int32(name='OriginalAmount', example='3191'),
  originalPrice?: float(name='OriginalPrice', example='3.34'),
  regionId?: string(name='RegionId', example='cn-hangzhou'),
  requestId?: string(name='RequestId', example='3B2E8108-7068-413E-BCA7-CAAB25D46408'),
  servicePack?: {
    servicePackInfo?: [ 
    {
      capacity?: int32(name='Capacity', example='2000'),
      endTime?: int32(name='EndTime', example='1612705988'),
      instanceName?: string(name='InstanceName', example='EHPCBAG-cn-78v12vbme0****'),
      startTime?: int32(name='StartTime', example='1610027588'),
    }
  ](name='ServicePackInfo')
  }(name='ServicePack'),
  tradePrice?: float(name='TradePrice', example='2.922'),
}

model QueryServicePackAndPriceResponse = {
  headers?: map[string]string(name='headers'),
  statusCode?: int32(name='statusCode'),
  body?: QueryServicePackAndPriceResponseBody(name='body'),
}

/**
 * @param request QueryServicePackAndPriceRequest
 * @param runtime runtime options for this request RuntimeOptions
 * @return QueryServicePackAndPriceResponse
 */
async function queryServicePackAndPriceWithOptions(runtime: $RuntimeOptions): QueryServicePackAndPriceResponse {
  var req = new OpenApiUtil.OpenApiRequest{};
  var params = new OpenApiUtil.Params{
    action = 'QueryServicePackAndPrice',
    version = '2018-04-12',
    protocol = 'HTTPS',
    pathname = '/',
    method = 'GET',
    authType = 'AK',
    style = 'RPC',
    reqBodyType = 'formData',
    bodyType = 'json',
  };
  return callApi(params, req, runtime);
}

/**
 * @return QueryServicePackAndPriceResponse
 */
async function queryServicePackAndPrice(): QueryServicePackAndPriceResponse {
  var runtime = new $RuntimeOptions{};
  return queryServicePackAndPriceWithOptions(runtime);
}

model RecoverClusterRequest {
  accountType?: string(name='AccountType', description='The service type of the domain account. Valid values:

*   nis
*   ldap

Default value: nis.', example='nis'),
  clientVersion?: string(name='ClientVersion', description='The version of the E-HPC client. The default value is the latest version of the client.

You can call the [ListCurrentClientVersion](https://help.aliyun.com/document_detail/87223.html) operation to query the latest version of the E-HPC client.', example='1.0.76'),
  clusterId?: string(name='ClusterId', description='The cluster ID. The cluster must be in the Exception state.

You can call the [ListClusters](https://help.aliyun.com/document_detail/87116.html) operation to query the ID and status of a cluster.

This parameter is required.', example='ehpc-hz-FYUr32****'),
  imageId?: string(name='ImageId', description='The image ID.

You can call the [ListImages](https://help.aliyun.com/document_detail/87213.html) and [ListCustomImages](https://help.aliyun.com/document_detail/87215.html) operations to query the images that are supported by E-HPC.', example='m-bp18133n0335yq****'),
  imageOwnerAlias?: string(name='ImageOwnerAlias', description='The type of the image. Valid values:

*   system: public image
*   self: custom image
*   others: shared image

Default value: system.', example='system'),
  osTag?: string(name='OsTag', description='The tag of the system image.

You can call the [ListImages](https://help.aliyun.com/document_detail/87213.html) and [ListCustomImages](https://help.aliyun.com/document_detail/87215.html) operations to query the image tags supported by Elastic High Performance Computing (E-HPC).', example='CentOS_7.2_64'),
  schedulerType?: string(name='SchedulerType', description='The type of the scheduler. Valid values:

*   pbs
*   slurm
*   opengridscheduler
*   deadline

Default value: pbs.', example='pbs'),
}

model RecoverClusterResponseBody = {
  requestId?: string(name='RequestId', description='The request ID.', example='18FB21E3-F423-4B84-BB63-D8887A29****'),
  taskId?: string(name='TaskId', description='The task ID.', example='18FB21E3-F423-4B84-BB63-D8887A29****'),
}

model RecoverClusterResponse = {
  headers?: map[string]string(name='headers'),
  statusCode?: int32(name='statusCode'),
  body?: RecoverClusterResponseBody(name='body'),
}

/**
 * @summary Resets and restores a cluster.
 *
 * @description You can call the operation to reset and restore a cluster only when the cluster is in the Exception state. You can call the [ListClusters](https://help.aliyun.com/document_detail/87116.html) operation to query the ID and status of a cluster. We recommend that you export all job data before you restore a cluster. When you reset and restore a cluster, take note of the following impacts:
 * *   The system disks of all nodes are changed. By default, new system disks are configured based on the settings that you specified when the cluster was created.
 * *   The data on the system disks and data disks of all cluster nodes is lost. The data includes user information, job information, scheduler queue information, and configuration data of auto-scaling queues. However, the data on File Storage NAS file systems is retained.
 * *   The self-managed queues in the cluster are deleted. All nodes are retained and migrated to the default queue of the cluster.
 *
 * @param request RecoverClusterRequest
 * @param runtime runtime options for this request RuntimeOptions
 * @return RecoverClusterResponse
 */
async function recoverClusterWithOptions(request: RecoverClusterRequest, runtime: $RuntimeOptions): RecoverClusterResponse {
  request.validate();
  var query = OpenApiUtil.query(request.toMap());
  var req = new OpenApiUtil.OpenApiRequest{ 
    query = OpenApiUtil.query(query),
  };
  var params = new OpenApiUtil.Params{
    action = 'RecoverCluster',
    version = '2018-04-12',
    protocol = 'HTTPS',
    pathname = '/',
    method = 'GET',
    authType = 'AK',
    style = 'RPC',
    reqBodyType = 'formData',
    bodyType = 'json',
  };
  return callApi(params, req, runtime);
}

/**
 * @summary Resets and restores a cluster.
 *
 * @description You can call the operation to reset and restore a cluster only when the cluster is in the Exception state. You can call the [ListClusters](https://help.aliyun.com/document_detail/87116.html) operation to query the ID and status of a cluster. We recommend that you export all job data before you restore a cluster. When you reset and restore a cluster, take note of the following impacts:
 * *   The system disks of all nodes are changed. By default, new system disks are configured based on the settings that you specified when the cluster was created.
 * *   The data on the system disks and data disks of all cluster nodes is lost. The data includes user information, job information, scheduler queue information, and configuration data of auto-scaling queues. However, the data on File Storage NAS file systems is retained.
 * *   The self-managed queues in the cluster are deleted. All nodes are retained and migrated to the default queue of the cluster.
 *
 * @param request RecoverClusterRequest
 * @return RecoverClusterResponse
 */
async function recoverCluster(request: RecoverClusterRequest): RecoverClusterResponse {
  var runtime = new $RuntimeOptions{};
  return recoverClusterWithOptions(request, runtime);
}

model RerunJobsRequest {
  async?: boolean(name='Async', description='Specifies whether to use an asynchronous link to rerun the job.

Default value: false', example='false'),
  clusterId?: string(name='ClusterId', description='The ID of the cluster.

You can call the [ListClusters](https://help.aliyun.com/document_detail/87116.html) operation to query the cluster ID.

This parameter is required.', example='ehpc-sh-3VeFyR****'),
  jobs?: string(name='Jobs', description='The list of jobs that you want to run. Maximum number of jobs: 100. Minimum number of jobs: 1.

Format: `[{"Id": "0.sched****"},{"Id": "1.sched****"}]`. Separate multiple jobs with commas (,).

You can call the [ListJobs](https://help.aliyun.com/document_detail/87251.html) operation to query the job ID.

>  You can rerun only jobs that are in the RUNNING or QUEUED state.

This parameter is required.', example='[{"Id":"1.scheduler"}]'),
}

model RerunJobsResponseBody = {
  requestId?: string(name='RequestId', description='The ID of the request.', example='04F0F334-1335-436C-A1D7-6C044FE7****'),
}

model RerunJobsResponse = {
  headers?: map[string]string(name='headers'),
  statusCode?: int32(name='statusCode'),
  body?: RerunJobsResponseBody(name='body'),
}

/**
 * @param request RerunJobsRequest
 * @param runtime runtime options for this request RuntimeOptions
 * @return RerunJobsResponse
 */
async function rerunJobsWithOptions(request: RerunJobsRequest, runtime: $RuntimeOptions): RerunJobsResponse {
  request.validate();
  var query = OpenApiUtil.query(request.toMap());
  var req = new OpenApiUtil.OpenApiRequest{ 
    query = OpenApiUtil.query(query),
  };
  var params = new OpenApiUtil.Params{
    action = 'RerunJobs',
    version = '2018-04-12',
    protocol = 'HTTPS',
    pathname = '/',
    method = 'GET',
    authType = 'AK',
    style = 'RPC',
    reqBodyType = 'formData',
    bodyType = 'json',
  };
  return callApi(params, req, runtime);
}

/**
 * @param request RerunJobsRequest
 * @return RerunJobsResponse
 */
async function rerunJobs(request: RerunJobsRequest): RerunJobsResponse {
  var runtime = new $RuntimeOptions{};
  return rerunJobsWithOptions(request, runtime);
}

model ResetNodesRequest {
  clusterId?: string(name='ClusterId', description='The ID of the cluster.

You can call the [ListClusters](https://help.aliyun.com/document_detail/87116.html) operation to query the cluster ID.

This parameter is required.', example='ehpc-hz-FYUr32****'),
  instance?: [ 
    {
      id?: string(name='Id', description='The ID of the compute node that you want to reset. Valid values of N: 1 to 100

You can call the [ListNodes](https://help.aliyun.com/document_detail/87161.html) operation to query the IDs of the compute nodes.', example='i-bp13p7vlcb1uihfv****'),
    }
  ](name='Instance', description='This parameter is required.'),
}

model ResetNodesResponseBody = {
  requestId?: string(name='RequestId', description='The ID of the request.', example='04F0F334-1335-436C-A1D7-6C044FE7****'),
  taskId?: string(name='TaskId', description='The ID of the task.', example='04F0F334-1335-436C-A1D7-6C044FE7****'),
}

model ResetNodesResponse = {
  headers?: map[string]string(name='headers'),
  statusCode?: int32(name='statusCode'),
  body?: ResetNodesResponseBody(name='body'),
}

/**
 * @description After a node is reset, the operating system and software return to their initial states. To ensure that jobs run as expected, we recommend that you do not reset running nodes unless you need to perform crash recovery.
 *
 * @param request ResetNodesRequest
 * @param runtime runtime options for this request RuntimeOptions
 * @return ResetNodesResponse
 */
async function resetNodesWithOptions(request: ResetNodesRequest, runtime: $RuntimeOptions): ResetNodesResponse {
  request.validate();
  var query = OpenApiUtil.query(request.toMap());
  var req = new OpenApiUtil.OpenApiRequest{ 
    query = OpenApiUtil.query(query),
  };
  var params = new OpenApiUtil.Params{
    action = 'ResetNodes',
    version = '2018-04-12',
    protocol = 'HTTPS',
    pathname = '/',
    method = 'GET',
    authType = 'AK',
    style = 'RPC',
    reqBodyType = 'formData',
    bodyType = 'json',
  };
  return callApi(params, req, runtime);
}

/**
 * @description After a node is reset, the operating system and software return to their initial states. To ensure that jobs run as expected, we recommend that you do not reset running nodes unless you need to perform crash recovery.
 *
 * @param request ResetNodesRequest
 * @return ResetNodesResponse
 */
async function resetNodes(request: ResetNodesRequest): ResetNodesResponse {
  var runtime = new $RuntimeOptions{};
  return resetNodesWithOptions(request, runtime);
}

model RunCloudMetricProfilingRequest {
  clusterId?: string(name='ClusterId', description='The ID of the E-HPC cluster.

This parameter is required.', example='ehpc-hz-jeJki6****'),
  duration?: int32(name='Duration', description='The duration of the profiling process. Unit: seconds.

Value values: 10 to 300.

Default value: 30.', example='300'),
  freq?: int32(name='Freq', description='The sampling frequency. Unit: Hz. Valid values: 1 to 2000.

Default value: 2000.', example='2000'),
  hostName?: string(name='HostName', description='The hostname.

This parameter is required.', example='compute0'),
  processId?: int32(name='ProcessId', description='The ID of the profiling process.

This parameter is required.', example='29075'),
  regionId?: string(name='RegionId', description='The region ID.', example='cn-hangzhou'),
}

model RunCloudMetricProfilingResponseBody = {
  requestId?: string(name='RequestId', description='The request ID.', example='8442AF35-875B-4FC0-8B7AAFDC339335D5'),
}

model RunCloudMetricProfilingResponse = {
  headers?: map[string]string(name='headers'),
  statusCode?: int32(name='statusCode'),
  body?: RunCloudMetricProfilingResponseBody(name='body'),
}

/**
 * @summary Starts the profiling process of a cluster.
 *
 * @param request RunCloudMetricProfilingRequest
 * @param runtime runtime options for this request RuntimeOptions
 * @return RunCloudMetricProfilingResponse
 */
async function runCloudMetricProfilingWithOptions(request: RunCloudMetricProfilingRequest, runtime: $RuntimeOptions): RunCloudMetricProfilingResponse {
  request.validate();
  var query = OpenApiUtil.query(request.toMap());
  var req = new OpenApiUtil.OpenApiRequest{ 
    query = OpenApiUtil.query(query),
  };
  var params = new OpenApiUtil.Params{
    action = 'RunCloudMetricProfiling',
    version = '2018-04-12',
    protocol = 'HTTPS',
    pathname = '/',
    method = 'GET',
    authType = 'AK',
    style = 'RPC',
    reqBodyType = 'formData',
    bodyType = 'json',
  };
  return callApi(params, req, runtime);
}

/**
 * @summary Starts the profiling process of a cluster.
 *
 * @param request RunCloudMetricProfilingRequest
 * @return RunCloudMetricProfilingResponse
 */
async function runCloudMetricProfiling(request: RunCloudMetricProfilingRequest): RunCloudMetricProfilingResponse {
  var runtime = new $RuntimeOptions{};
  return runCloudMetricProfilingWithOptions(request, runtime);
}

model SetAutoScaleConfigRequest {
  clusterId?: string(name='ClusterId', description='The cluster ID.

This parameter is required.', example='ehpc-hz-FYUr32****'),
  computeEnableHt?: boolean(name='ComputeEnableHt', description='Specifies whether to enable hyper-threading for the ECS instance that is used as the compute node.

>  You can only disable hyper-threading for some instance types. The hyper-threading is enabled for ECS instances by default. For more information, see [Specify and view CPU options](https://help.aliyun.com/document_detail/145895.html).', example='true'),
  dnsConfig?: string(name='DnsConfig', description='The configurations of DNS.', example='"{\\\\"DnsType\\\\":\\\\"PrivateZone\\\\",\\\\"DnsName\\\\":\\\\"xxxxx\\\\"}"'),
  enableAutoGrow?: boolean(name='EnableAutoGrow', description='Specifies whether to enable auto scale-out. Valid values:

*   true: enables auto scale-out.
*   false: disables auto scale-out.

Default value: false.', example='false'),
  enableAutoShrink?: boolean(name='EnableAutoShrink', description='Specifies whether to enable auto scale-in. Valid values:

*   true: enables auto scale-in.
*   false: disables auto scale-in.

Default value: false.', example='false'),
  excludeNodes?: string(name='ExcludeNodes', description='The compute nodes that are excluded from auto scaling tasks. Separate multiple compute nodes with commas (,).

If you want to retain a compute node, you can specify the node as an additional node to retain the node when it is idle.', example='i-bp19lgqwxb4206t5****,i-bp1g4hvzs9pywrhb****'),
  extraNodesGrowRatio?: int32(name='ExtraNodesGrowRatio', description='The percentage of extra compute nodes. Valid values: 0 to 100.

Default value: 0.

If you need to add 100 compute nodes and the value of the ExtraNodesGrowRatio parameter is 2, 102 compute nodes are added.', example='0'),
  growIntervalInMinutes?: int32(name='GrowIntervalInMinutes', description='The interval between two consecutive rounds of scale-out. Unit: minutes.

Valid values: 2 to 10.

Default value: 2.

> An interval may exist during multiple rounds of a scale-out task or between two consecutive scale-out tasks.', example='2'),
  growRatio?: int32(name='GrowRatio', description='The percentage of each round of a scale-out task. Valid values: 1 to 100.

Default value: 100.

If you set GrowRatio to 50, the scale-out has two rounds. Each round completes half of the scale-out.', example='50'),
  growTimeoutInMinutes?: int32(name='GrowTimeoutInMinutes', description='The scale-out timeout period. Unit: minutes.

Valid values: 10 to 60.

Default value: 20.

If the scale-out timeout period has been reached but the scale-out nodes still do not reach the Running state, the system releases them.', example='20'),
  imageId?: string(name='ImageId', description='The IDs of the images.

> 

*   If both `Queues.N.QueueImageId` and `ImageId` are specified, `Queues.N.QueueImageId` prevails.

*   If you set `Queues.N.QueueImageId` or `ImageId`, the parameter that you set takes effect.
*   If you leave both `Queues.N.QueueImageId` and `ImageId` empty, the image that was specified when you created the cluster or the last time you scaled out the cluster is used by default.', example='centos_7_03_64_20G_alibase_201708****'),
  maxNodesInCluster?: int32(name='MaxNodesInCluster', description='The maximum number of compute nodes that can be added to the cluster. Valid values: 0 to 500.

Default value: 100.

This parameter is required.', example='100'),
  queues?: [ 
    {
      autoMinNodesPerCycle?: boolean(name='AutoMinNodesPerCycle', description='Specifies whether to automatically specify the minimum number of compute nodes that can be added in each round of scale-out. If you set this parameter to true, the minimum number of nodes for each scale-out is equal to the number of nodes required by the job. The maximum number is 99.', example='false'),
      dataDisks?: [ 
        {
          dataDiskCategory?: string(name='DataDiskCategory', description='The category of the data disk. Valid values:

*   cloud_efficiency: ultra disk.
*   cloud_ssd: standard SSD.
*   cloud_essd: ESSD.
*   cloud: basic disk.

Default value: cloud_efficiency.

Valid values of N: 0 to 16.', example='cloud_efficiency'),
          dataDiskDeleteWithInstance?: boolean(name='DataDiskDeleteWithInstance', description='Specifies whether the data disk is released when the node is released. Valid values:

*   true
*   false

Default value: true.

Valid values of N: 0 to 16.', example='true'),
          dataDiskEncrypted?: boolean(name='DataDiskEncrypted', description='Specifies whether to encrypt the data disk. Valid values:

*   true
*   false

Default value: false.

Valid values of N: 0 to 16.', example='false'),
          dataDiskKMSKeyId?: string(name='DataDiskKMSKeyId', description='The Key Management Service (KMS) key ID of the data disk.

Valid values of N: 0 to 16.', example='0e478b7a-4262-4802-b8cb-00d3fb40826X'),
          dataDiskPerformanceLevel?: string(name='DataDiskPerformanceLevel', description='The performance level of the ESSD used as the data disk. The parameter takes effect only when the Queues.N.DataDisks.N.DataDiskCategory parameter is set to cloud_essd. Valid values:

*   PL0: An ESSD can deliver up to 10,000 random read/write IOPS.
*   PL1: An ESSD can deliver up to 50,000 random read/write IOPS.
*   PL2: An ESSD can deliver up to 100,000 random read/write IOPS.
*   PL3: An ESSD can deliver up to 1,000,000 random read/write IOPS.

Default value: PL1.

Valid values of N: 0 to 16.', example='PL1'),
          dataDiskSize?: int32(name='DataDiskSize', description='The size of the data disk. Unit: GB.

Valid values: 40 to 500.

Default value: 40.

Valid values of N: 0 to 16.', example='40'),
        }
      ](name='DataDisks', description='The list of data disks.'),
      enableAutoGrow?: boolean(name='EnableAutoGrow', description='Specifies whether the queue enables auto scale-out. Valid values:

*   true: enables auto scale-out.
*   false: disables auto scale-out.

Valid values of N: 1 to 8.

Default value: false.', example='false'),
      enableAutoShrink?: boolean(name='EnableAutoShrink', description='Specifies whether the queue enables auto scale-in. Valid values:

*   true: enables auto scale-in.
*   false: disables auto scale-in.

Valid values of N: 1 to 8.

Default value: false.', example='false'),
      hostNamePrefix?: string(name='HostNamePrefix', description='The hostname prefix of the host that is used to perform scale-out for the queue. You can manage compute nodes that have a specified hostname prefix.

Valid values of N: 1 to 8.', example='compute'),
      hostNameSuffix?: string(name='HostNameSuffix', description='The hostname suffix of the host that is used to perform scale-out for the queue. You can manage nodes that have a specified hostname suffix.

Valid values of N: 1 to 8.', example='000'),
      instanceType?: string(name='InstanceType', description='The instance type of the compute nodes that are automatically added to the queue. Valid values of N: 1 to 8.', example='ecs.n1.medium'),
      instanceTypes?: [ 
        {
          instanceType?: string(name='InstanceType', description='The instance type of the compute nodes that are automatically added to the queue.

You can specify the specification for 1 to 8 nodes.

The instance types of N compute nodes in the queue can be set at the same time when auto scaling is performed in the queue. Valid values of N: 0 to 500.', example='ecs.n1.tiny'),
          spotDuration?: int32(name='SpotDuration', description='The protection period of the preemptible instance. Unit: hours. Valid values: 0 to 1. A value of 0 means that no protection period is specified. Default value: 1.', example='0'),
          spotInterruptionBehavior?: string(name='SpotInterruptionBehavior', description='The interruption mode of the preemptible instance. The value can only be Terminate, which indicates that the instance is released.', example='Terminate'),
          spotPriceLimit?: float(name='SpotPriceLimit', description='The maximum hourly price of the compute nodes that are automatically added to the queue. The value can be accurate to three decimal places. The parameter takes effect only when `Queues.N.InstanceTypes.N.SpotStrategy` is set to `SpotWithPriceLimit`.

You can specify the maximum hourly price for 1 to 8 compute nodes.

The maximum hourly prices of N compute nodes in the queue can be set at the same time when auto scaling is performed in the queue. Valid values of N: 0 to 500.', example='0.660'),
          spotStrategy?: string(name='SpotStrategy', description='The preemption policy for the compute node that is automatically added to the queue. Valid values:

*   NoSpot: The compute node is created as a pay-as-you-go instance.
*   SpotWithPriceLimit: The compute node is created as a preemptible instance that has a user-defined maximum hourly price.
*   SpotAsPriceGo: The compute node is created as a preemptible instance for which the market price at the time of purchase is used as the bid price.

Default value: NoSpot.

You can specify the preemption policy for 1 to 8 compute nodes.

The preemption policies of N compute nodes in the queue can be set at the same time when auto scaling is performed in the queue. Valid values of N: 0 to 500.', example='SpotWithPriceLimit'),
          vSwitchId?: string(name='VSwitchId', description='The vSwitch ID of the compute nodes that are automatically added to the queue.

You can specify 1 to 8 IDs.

The vSwitch IDs of N compute nodes in the queue can be set at the same time when auto scaling is performed in the queue. Valid values of N: 0 to 500.', example='vsw-bp1lfcjbfb099rrjn****'),
          zoneId?: string(name='ZoneId', description='The ID of the zone that compute nodes automatically added to the queue belong.

You can specify 1 to 8 IDs.

The zone IDs of N compute nodes in the queue can be set at the same time when auto scaling is performed in the queue. Valid values of N: 0 to 500.', example='cn-hangzhou-b'),
        }
      ](name='InstanceTypes', description='The instance types of the nodes in the queue.'),
      maxNodesInQueue?: int32(name='MaxNodesInQueue', description='The maximum number of compute nodes that can be added to the queue. Valid values: 0 to 500.

Valid values of N: 1 to 8.

Default value: 100.', example='30'),
      maxNodesPerCycle?: long(name='MaxNodesPerCycle', description='The maximum number of compute nodes that can be added in each round of scale-out. Valid values: 0 to 99.

Default value: 0.', example='20'),
      minNodesInQueue?: int32(name='MinNodesInQueue', description='The minimum number of compute nodes that can be removed from the queue. Valid values: 0 to 50.

Valid values of N: 1 to 8.

Default value: 0.', example='0'),
      minNodesPerCycle?: long(name='MinNodesPerCycle', description='The minimum number of compute nodes that can be added in each round of scale-out. Valid values: 1 to 99

Default value: 1.

If the number of compute nodes that you want to add in a round is less than the value of this property, the system automatically changes the value of this property to the number of compute nodes that you want to add in a round. This helps ensure that compute nodes can be added as expected.

>  The configuration takes effect only for the minimum compute nodes that can be added in the current round.', example='5'),
      queueImageId?: string(name='QueueImageId', description='The image ID of the queue where the scale-out is performed. Valid values of N: 1 to 8.

> 

*   If you set both `Queues.N.QueueImageId` and `ImageId`, `Queues.N.QueueImageId` prevails.

*   If you set `Queues.N.QueueImageId` or `ImageId`, the parameter that you set takes effect.
*   If you leave both `Queues.N.QueueImageId` and `ImageId` empty, the image that was specified when you created the cluster or the last time when you scaled out the cluster is used by default.', example='centos_7_03_64_20G_alibase_201708****'),
      queueName?: string(name='QueueName', description='The name of the queue. You can specify 1 to 8 names.', example='cluster1'),
      sortedByInventory?: boolean(name='SortedByInventory', description='Specifies whether the instances are unordered. Valid values:

*   true
*   false

>  If you set this parameter to true, the system selects instance types in descending order of the number of instances in stock during auto scaling.', example='false'),
      spotPriceLimit?: float(name='SpotPriceLimit', description='The maximum hourly price of the compute nodes that are automatically added to the queue. The value can be accurate to three decimal places. The parameter takes effect only when `Queues.N.SpotStrategy` is set to `SpotWithPriceLimit`.

Valid values of N: 1 to 8.', example='0.662'),
      spotStrategy?: string(name='SpotStrategy', description='The preemption policy of the compute node that is automatically added to the queue. Valid values of N: 1 to 8.

Valid values:

*   NoSpot: The compute node is created as a pay-as-you-go instance.
*   SpotWithPriceLimit: The compute node is created as a preemptible instance that has a user-defined maximum hourly price.
*   SpotAsPriceGo: The compute node is created as a preemptible instance for which the market price at the time of purchase is used as the bid price.

Default value: NoSpot.', example='NoSpot'),
      systemDiskCategory?: string(name='SystemDiskCategory', description='The category of the system disk specified for the compute nodes that are added to the queue. Valid values:

*   cloud_efficiency: ultra disk.
*   cloud_ssd: standard SSD.
*   cloud_essd: enhanced SSD (ESSD).
*   cloud: basic disk. Disks of this type are retired.

Valid values of N: 1 to 8.

Default value: cloud_efficiency.', example='cloud_efficiency'),
      systemDiskLevel?: string(name='SystemDiskLevel', description='The performance level of the system disk specified for the compute nodes that are added to the queue. Valid values:

*   PL0: An ESSD can deliver up to 10,000 random read/write IOPS.
*   PL1: An ESSD can deliver up to 50,000 random read/write IOPS.
*   PL2: An ESSD can deliver up to 100,000 random read/write IOPS.
*   PL3: An ESSD can deliver up to 1,000,000 random read/write IOPS.

Valid values of N: 1 to 8.

Default value: PL1.', example='PL1'),
      systemDiskSize?: int32(name='SystemDiskSize', description='The size of the system disk specified for the compute nodes that are added to the queue. Unit: GB.

Valid values: 40 to 500.

Valid values of N: 1 to 8.

Default value: 40.', example='40'),
    }
  ](name='Queues', description='The information about the queue.', nullable=false),
  shrinkIdleTimes?: int32(name='ShrinkIdleTimes', description='The number of consecutive times that a compute node is idle during the resource scale-in check.

Valid values: 2 to 5.

Default value: 3.

If the parameter is set to 3, a compute node is idle more than three consecutive times. In this case, the node is released. If a compute node is idle for longer than 6 minutes continuously, it is released by default. This is because the default value of the ShrinkIntervalInMinutes parameter is 2.', example='3'),
  shrinkIntervalInMinutes?: int32(name='ShrinkIntervalInMinutes', description='The interval between two consecutive rounds of scale-in. Unit: minutes.

Valid values: 2 to 10.

Default value: 2.', example='2'),
  spotPriceLimit?: float(name='SpotPriceLimit', description='The maximum hourly price of the compute nodes. The value can be accurate to three decimal places. The parameter takes effect only when `SpotStrategy` is set to `SpotWithPriceLimit`.', example='0.062'),
  spotStrategy?: string(name='SpotStrategy', description='The preemption policy of the compute nodes. Valid values:

*   NoSpot: The compute nodes are pay-as-you-go instances.
*   SpotWithPriceLimit: The compute nodes are preemptible instances that have a user-defined maximum hourly price.
*   SpotAsPriceGo: The compute nodes are preemptible instances for which the market price at the time of purchase is used as the bid price.

Default value: NoSpot.', example='SpotWithPriceLimit'),
}

model SetAutoScaleConfigResponseBody = {
  requestId?: string(name='RequestId', description='The request ID.', example='04F0F334-13358736C-A1D7-6C044FE7****'),
}

model SetAutoScaleConfigResponse = {
  headers?: map[string]string(name='headers'),
  statusCode?: int32(name='statusCode'),
  body?: SetAutoScaleConfigResponseBody(name='body'),
}

/**
 * @summary Configures the auto scaling settings of a cluster.
 *
 * @description ## Usage notes
 * If the settings in the Queue Configuration section are different from the settings in the Global Configurations section, the former prevails.
 *
 * @param request SetAutoScaleConfigRequest
 * @param runtime runtime options for this request RuntimeOptions
 * @return SetAutoScaleConfigResponse
 */
async function setAutoScaleConfigWithOptions(request: SetAutoScaleConfigRequest, runtime: $RuntimeOptions): SetAutoScaleConfigResponse {
  request.validate();
  var query = OpenApiUtil.query(request.toMap());
  var req = new OpenApiUtil.OpenApiRequest{ 
    query = OpenApiUtil.query(query),
  };
  var params = new OpenApiUtil.Params{
    action = 'SetAutoScaleConfig',
    version = '2018-04-12',
    protocol = 'HTTPS',
    pathname = '/',
    method = 'GET',
    authType = 'AK',
    style = 'RPC',
    reqBodyType = 'formData',
    bodyType = 'json',
  };
  return callApi(params, req, runtime);
}

/**
 * @summary Configures the auto scaling settings of a cluster.
 *
 * @description ## Usage notes
 * If the settings in the Queue Configuration section are different from the settings in the Global Configurations section, the former prevails.
 *
 * @param request SetAutoScaleConfigRequest
 * @return SetAutoScaleConfigResponse
 */
async function setAutoScaleConfig(request: SetAutoScaleConfigRequest): SetAutoScaleConfigResponse {
  var runtime = new $RuntimeOptions{};
  return setAutoScaleConfigWithOptions(request, runtime);
}

model SetPostScriptsRequest {
  clusterId?: string(name='ClusterId', description='The cluster ID.

You can call the [ListClusters](https://help.aliyun.com/document_detail/87116.html) operation to obtain the cluster ID.

This parameter is required.', example='ehpc-sh-EnjshUxn'),
  postInstallScripts?: [ 
    {
      args?: string(name='Args', description='The parameter that is used to run the post-processing script.', example='-h'),
      url?: string(name='Url', description='The URL that is used to download the post-processing script.', example='https://bucket.oss-cn-shanghai.aliyuncs.com/postscript_examples.sh'),
    }
  ](name='PostInstallScripts', description='The post-processing scripts.'),
  regionId?: string(name='RegionId', description='The ID of the region where the cluster resides. You can call the [ListRegions](https://help.aliyun.com/document_detail/188593.html) operation to query the latest region list.

This parameter is required.', example='cn-shanghai'),
}

model SetPostScriptsResponseBody = {
  requestId?: string(name='RequestId', description='The request ID.', example='B745C159-3155-4B94-95D0-4B73D4D2****'),
}

model SetPostScriptsResponse = {
  headers?: map[string]string(name='headers'),
  statusCode?: int32(name='statusCode'),
  body?: SetPostScriptsResponseBody(name='body'),
}

/**
 * @summary Configures the post-processing scripts of a cluster.
 *
 * @param request SetPostScriptsRequest
 * @param runtime runtime options for this request RuntimeOptions
 * @return SetPostScriptsResponse
 */
async function setPostScriptsWithOptions(request: SetPostScriptsRequest, runtime: $RuntimeOptions): SetPostScriptsResponse {
  request.validate();
  var query = OpenApiUtil.query(request.toMap());
  var req = new OpenApiUtil.OpenApiRequest{ 
    query = OpenApiUtil.query(query),
  };
  var params = new OpenApiUtil.Params{
    action = 'SetPostScripts',
    version = '2018-04-12',
    protocol = 'HTTPS',
    pathname = '/',
    method = 'GET',
    authType = 'AK',
    style = 'RPC',
    reqBodyType = 'formData',
    bodyType = 'json',
  };
  return callApi(params, req, runtime);
}

/**
 * @summary Configures the post-processing scripts of a cluster.
 *
 * @param request SetPostScriptsRequest
 * @return SetPostScriptsResponse
 */
async function setPostScripts(request: SetPostScriptsRequest): SetPostScriptsResponse {
  var runtime = new $RuntimeOptions{};
  return setPostScriptsWithOptions(request, runtime);
}

model SetQueueRequest {
  clusterId?: string(name='ClusterId', description='The ID of the cluster.

You can call the [ListClusters](https://help.aliyun.com/document_detail/87116.html) operation to query the cluster ID.

This parameter is required.', example='ehpc-hz-FYUr32****'),
  node?: [ 
    {
      name?: string(name='Name', description='The name of the compute node that you want to move. Valid values of N: 1 to 100.

You can call the [ListNodes](https://help.aliyun.com/document_detail/87161.html) operation to query the names of the compute nodes.', example='compute1'),
    }
  ](name='Node', description='This parameter is required.'),
  queueName?: string(name='QueueName', description='The name of the destination queue.

You can call the [ListQueues](https://help.aliyun.com/document_detail/92176.html) operation to query the queue name.

This parameter is required.', example='work'),
}

model SetQueueResponseBody = {
  requestId?: string(name='RequestId', description='The ID of the request.', example='DFC3EAA9-F11F-4ED0-836F-4FFCB279E700'),
}

model SetQueueResponse = {
  headers?: map[string]string(name='headers'),
  statusCode?: int32(name='statusCode'),
  body?: SetQueueResponseBody(name='body'),
}

/**
 * @param request SetQueueRequest
 * @param runtime runtime options for this request RuntimeOptions
 * @return SetQueueResponse
 */
async function setQueueWithOptions(request: SetQueueRequest, runtime: $RuntimeOptions): SetQueueResponse {
  request.validate();
  var query = OpenApiUtil.query(request.toMap());
  var req = new OpenApiUtil.OpenApiRequest{ 
    query = OpenApiUtil.query(query),
  };
  var params = new OpenApiUtil.Params{
    action = 'SetQueue',
    version = '2018-04-12',
    protocol = 'HTTPS',
    pathname = '/',
    method = 'GET',
    authType = 'AK',
    style = 'RPC',
    reqBodyType = 'formData',
    bodyType = 'json',
  };
  return callApi(params, req, runtime);
}

/**
 * @param request SetQueueRequest
 * @return SetQueueResponse
 */
async function setQueue(request: SetQueueRequest): SetQueueResponse {
  var runtime = new $RuntimeOptions{};
  return setQueueWithOptions(request, runtime);
}

model SetSchedulerInfoRequest {
  clusterId?: string(name='ClusterId', description='The ID of the E-HPC cluster.

You can call the [ListClusters](https://help.aliyun.com/document_detail/87116.html) operation to query the cluster ID.

This parameter is required.', example='ehpc-hz-FYUr32****'),
  pbsInfo?: [ 
    {
      aclLimit?: [ 
        {
          aclUsers?: string(name='AclUsers', description='The user that can use the queue. Separate multiple users with commas (`,`).

If you specify users, you must specify the PbsInfo.N.AclLimit.N.Queue parameter.', example='user1,user2'),
          queue?: string(name='Queue', description='AclLimit specifies the queue that has limits when it is used. Valid values of N: 0 to 100.

If you set `PbsInfo.N.AclLimit.N.Queue` to `workq` and `PbsInfo.N.AclLimit.N.AclUsers` to `user1,user2`, workq can be used only by user1 and user2.', example='workq'),
        }
      ](name='AclLimit', description='The information about limits on the queue.'),
      jobHistoryDuration?: int32(name='JobHistoryDuration', description='The retention period of jobs. After the retention period is exceeded, job data is deleted. Unit: days.\\\\
Valid values: 1 to 30.\\\\
Default value: 14.', example='14'),
      resourceLimit?: [ 
        {
          cpus?: int32(name='Cpus', description='The maximum number of vCPUs that can be used for nodes in a queue.', example='2'),
          maxJobs?: int32(name='MaxJobs', description='The maximum number of jobs that can be submitted to the cluster. If the total number of running jobs and queuing jobs exceeds the value, no more jobs can be submitted.', example='1000'),
          mem?: string(name='Mem', description='The maximum memory resources that can be used in a queue. Units:

*   gb
*   mb
*   kb', example='2gb'),
          nodes?: int32(name='Nodes', description='The maximum number of nodes that can be used in a queue.', example='2'),
          queue?: string(name='Queue', description='PbsInfo specifies the number of PBS schedulers that can be configured in the cluster. Valid values of N: 0 to 100.

ResourceLimit specifies the maximum number of queue resources that can be used. Valid values of N: 0 to 100.

Queue specifies the name of the queue that is used to run jobs.

If one of the User, Cpus, Nodes, and Mem parameters is set in ResourceLimit, you must specify the Queue parameter.', example='workq'),
          user?: string(name='User', description='The name of the user that runs jobs.', example='user1'),
        }
      ](name='ResourceLimit', description='The information about the nodes that are used by cluster users.'),
      schedInterval?: int32(name='SchedInterval', description='PbsInfo specifies the number of PBS schedulers that can be configured in the cluster. Valid values of N: 0 to 100.

SchedInterval specifies the scheduling period. Unit: seconds.

A scheduling period is the interval between two consecutive running jobs. If you set SchedInterval to 60, another job can be run 60 seconds after a job starts running.

Default value: 60.', example='60'),
      schedMaxJobs?: int32(name='SchedMaxJobs', description='The maximum number of jobs that can be scheduled in the cluster. If the total number of running jobs and queuing jobs exceeds the value, no more jobs can be submitted. Default value: 20000.', example='20000'),
      schedMaxQueuedJobs?: int32(name='SchedMaxQueuedJobs', description='The maximum number of queuing jobs that can be scheduled in the cluster. If the number of queuing jobs exceeds the value, no more jobs can be submitted. Default value: 10000.', example='10000'),
    }
  ](name='PbsInfo', description='The information about PBS schedulers.'),
  regionId?: string(name='RegionId', description='The region ID.

You can call the [ListRegions](https://help.aliyun.com/document_detail/188593.html) operation to obtain the IDs of regions supported by Elastic High Performance Computing (E-HPC).

This parameter is required.', example='cn-hangzhou'),
  scheduler?: [ 
    {
      schedName?: string(name='SchedName', description='The name of the scheduler. Valid values:

*   pbs
*   pbs19
*   slurm
*   slurm19
*   slurm20

>  If you set Scheduler.N.SchedName to pbs or pbs19, you must specify at least one of the PbsInfo.N.SchedInterval, PbsInfo.N.JobHistoryDuration, PbsInfo.N.ResourceLimit, and PbsInfo.N.AclLimit parameters. If you set Scheduler.N.SchedName to slurm, slurm19, or slurm20, you must specify at least one of the SlurmInfo.N.SchedInterval and SlurmInfo.N.BackfillInterval parameters.

This parameter is required.', example='pbs'),
    }
  ](name='Scheduler', description='The scheduler information.

This parameter is required.'),
  slurmInfo?: [ 
    {
      backfillInterval?: int32(name='BackfillInterval', description='The backfill scheduling period. Unit: seconds.

Default value: 60.', example='60'),
      schedInterval?: int32(name='SchedInterval', description='SlurmInfo specifies the number of Slurm schedulers that can be configured in the cluster. Valid values of N: 0 to 100.

SchedInterval specifies the scheduling period. Unit: seconds.

Default value: 60.', example='60'),
    }
  ](name='SlurmInfo', description='The information about Slurm schedulers.'),
}

model SetSchedulerInfoResponseBody = {
  message?: string(name='Message', description='The data returned.', example='pbs: scheduler setting successfully.'),
  requestId?: string(name='RequestId', description='The request ID.', example='BBC2F93D-003A-49C4-850C-B826EECF****'),
}

model SetSchedulerInfoResponse = {
  headers?: map[string]string(name='headers'),
  statusCode?: int32(name='statusCode'),
  body?: SetSchedulerInfoResponseBody(name='body'),
}

/**
 * @summary Configures the scheduler settings of a cluster.
 *
 * @param request SetSchedulerInfoRequest
 * @param runtime runtime options for this request RuntimeOptions
 * @return SetSchedulerInfoResponse
 */
async function setSchedulerInfoWithOptions(request: SetSchedulerInfoRequest, runtime: $RuntimeOptions): SetSchedulerInfoResponse {
  request.validate();
  var query = OpenApiUtil.query(request.toMap());
  var req = new OpenApiUtil.OpenApiRequest{ 
    query = OpenApiUtil.query(query),
  };
  var params = new OpenApiUtil.Params{
    action = 'SetSchedulerInfo',
    version = '2018-04-12',
    protocol = 'HTTPS',
    pathname = '/',
    method = 'GET',
    authType = 'AK',
    style = 'RPC',
    reqBodyType = 'formData',
    bodyType = 'json',
  };
  return callApi(params, req, runtime);
}

/**
 * @summary Configures the scheduler settings of a cluster.
 *
 * @param request SetSchedulerInfoRequest
 * @return SetSchedulerInfoResponse
 */
async function setSchedulerInfo(request: SetSchedulerInfoRequest): SetSchedulerInfoResponse {
  var runtime = new $RuntimeOptions{};
  return setSchedulerInfoWithOptions(request, runtime);
}

model StartClusterRequest {
  clusterId?: string(name='ClusterId', description='The ID of the cluster that you want to start.

This parameter is required.', example='ehpc-hz-FYUr32****'),
}

model StartClusterResponseBody = {
  requestId?: string(name='RequestId', description='The ID of the request.', example='76E1ADE7-D15A-457F-AAFD-06C5A5F052D0'),
  taskId?: string(name='TaskId', description='The ID of the task.', example='76E1ADE7-D15A-457F-AAFD-06C5A5F052D0'),
}

model StartClusterResponse = {
  headers?: map[string]string(name='headers'),
  statusCode?: int32(name='statusCode'),
  body?: StartClusterResponseBody(name='body'),
}

/**
 * @param request StartClusterRequest
 * @param runtime runtime options for this request RuntimeOptions
 * @return StartClusterResponse
 */
async function startClusterWithOptions(request: StartClusterRequest, runtime: $RuntimeOptions): StartClusterResponse {
  request.validate();
  var query = OpenApiUtil.query(request.toMap());
  var req = new OpenApiUtil.OpenApiRequest{ 
    query = OpenApiUtil.query(query),
  };
  var params = new OpenApiUtil.Params{
    action = 'StartCluster',
    version = '2018-04-12',
    protocol = 'HTTPS',
    pathname = '/',
    method = 'GET',
    authType = 'AK',
    style = 'RPC',
    reqBodyType = 'formData',
    bodyType = 'json',
  };
  return callApi(params, req, runtime);
}

/**
 * @param request StartClusterRequest
 * @return StartClusterResponse
 */
async function startCluster(request: StartClusterRequest): StartClusterResponse {
  var runtime = new $RuntimeOptions{};
  return startClusterWithOptions(request, runtime);
}

model StartNodesRequest {
  clusterId?: string(name='ClusterId', description='The ID of the cluster.

You can call the [ListClusters](https://help.aliyun.com/document_detail/87116.html) operation to query the cluster ID.

This parameter is required.', example='ehpc-hz-FYUr32****'),
  instance?: [ 
    {
      id?: string(name='Id', description='The ID of the Nth node. Valid values of N: 1 to 100.

Make sure that the node is in the Stopped state. You can call the [ListNodes](https://help.aliyun.com/document_detail/87161.html) operation to query the status of the node.', example='i-bp13p7vlcb1uihfv****'),
    }
  ](name='Instance', description='This parameter is required.'),
  role?: string(name='Role', description='The role of the node. Valid values:

*   Manager: management node
*   Login: logon node
*   Compute: compute node

Default value: Compute', example='Compute'),
}

model StartNodesResponseBody = {
  requestId?: string(name='RequestId', description='The ID of the request.', example='04F0F334-1335-436C-A1D7-6C044FE7****'),
  taskId?: string(name='TaskId', description='The ID of the task.', example='04F0F334-1335-436C-A1D7-6C044FE7****'),
}

model StartNodesResponse = {
  headers?: map[string]string(name='headers'),
  statusCode?: int32(name='statusCode'),
  body?: StartNodesResponseBody(name='body'),
}

/**
 * @param request StartNodesRequest
 * @param runtime runtime options for this request RuntimeOptions
 * @return StartNodesResponse
 */
async function startNodesWithOptions(request: StartNodesRequest, runtime: $RuntimeOptions): StartNodesResponse {
  request.validate();
  var query = OpenApiUtil.query(request.toMap());
  var req = new OpenApiUtil.OpenApiRequest{ 
    query = OpenApiUtil.query(query),
  };
  var params = new OpenApiUtil.Params{
    action = 'StartNodes',
    version = '2018-04-12',
    protocol = 'HTTPS',
    pathname = '/',
    method = 'GET',
    authType = 'AK',
    style = 'RPC',
    reqBodyType = 'formData',
    bodyType = 'json',
  };
  return callApi(params, req, runtime);
}

/**
 * @param request StartNodesRequest
 * @return StartNodesResponse
 */
async function startNodes(request: StartNodesRequest): StartNodesResponse {
  var runtime = new $RuntimeOptions{};
  return startNodesWithOptions(request, runtime);
}

model StartVisualServiceRequest {
  cidrIp?: string(name='CidrIp', description='A public IP address of logon nodes in the cluster.

This parameter is required.', example='``190.100.**.**``'),
  clusterId?: string(name='ClusterId', description='The ID of the cluster.

This parameter is required.', example='ehpc-hz-jeJki6****'),
  port?: int32(name='Port', description='The fixed port. Set the value to 12016

This parameter is required.', example='12016'),
}

model StartVisualServiceResponseBody = {
  message?: string(name='Message', description='The status of the VNC Remote visualization service. Valid values:

*   Service started
*   Service stopped', example='Service started'),
  requestId?: string(name='RequestId', description='The ID of the request.', example='896D338C-E4F4-41EC-A154-D605E5DE6880'),
}

model StartVisualServiceResponse = {
  headers?: map[string]string(name='headers'),
  statusCode?: int32(name='statusCode'),
  body?: StartVisualServiceResponseBody(name='body'),
}

/**
 * @summary Starts the Virtual Network Console (VNC) Remote visualization service in a specified cluster.
 *
 * @param request StartVisualServiceRequest
 * @param runtime runtime options for this request RuntimeOptions
 * @return StartVisualServiceResponse
 */
async function startVisualServiceWithOptions(request: StartVisualServiceRequest, runtime: $RuntimeOptions): StartVisualServiceResponse {
  request.validate();
  var query = OpenApiUtil.query(request.toMap());
  var req = new OpenApiUtil.OpenApiRequest{ 
    query = OpenApiUtil.query(query),
  };
  var params = new OpenApiUtil.Params{
    action = 'StartVisualService',
    version = '2018-04-12',
    protocol = 'HTTPS',
    pathname = '/',
    method = 'GET',
    authType = 'AK',
    style = 'RPC',
    reqBodyType = 'formData',
    bodyType = 'json',
  };
  return callApi(params, req, runtime);
}

/**
 * @summary Starts the Virtual Network Console (VNC) Remote visualization service in a specified cluster.
 *
 * @param request StartVisualServiceRequest
 * @return StartVisualServiceResponse
 */
async function startVisualService(request: StartVisualServiceRequest): StartVisualServiceResponse {
  var runtime = new $RuntimeOptions{};
  return startVisualServiceWithOptions(request, runtime);
}

model StopClusterRequest {
  clusterId?: string(name='ClusterId', description='The cluster ID.

You can call the [ListClusters](https://help.aliyun.com/document_detail/87116.html) operation to query the list of clusters in a region.

This parameter is required.', example='ehpc-hz-FYUr32****'),
}

model StopClusterResponseBody = {
  requestId?: string(name='RequestId', description='The request ID.', example='04F0F334-1335-436C-A1D7-6C044FE7****'),
  taskId?: string(name='TaskId', description='The task ID.', example='04F0F334-1335-436C-A1D7-6C044FE7****'),
}

model StopClusterResponse = {
  headers?: map[string]string(name='headers'),
  statusCode?: int32(name='statusCode'),
  body?: StopClusterResponseBody(name='body'),
}

/**
 * @summary Stops a cluster.
 *
 * @description If you stop a subscription compute node, its billing is not affected. If you stop a pay-as-you-go compute node for which you have enabled the *economical mode*, you are no longer charged for its computing resources. For more information, see [Economical mode](https://help.aliyun.com/document_detail/63353.html).
 *
 * @param request StopClusterRequest
 * @param runtime runtime options for this request RuntimeOptions
 * @return StopClusterResponse
 */
async function stopClusterWithOptions(request: StopClusterRequest, runtime: $RuntimeOptions): StopClusterResponse {
  request.validate();
  var query = OpenApiUtil.query(request.toMap());
  var req = new OpenApiUtil.OpenApiRequest{ 
    query = OpenApiUtil.query(query),
  };
  var params = new OpenApiUtil.Params{
    action = 'StopCluster',
    version = '2018-04-12',
    protocol = 'HTTPS',
    pathname = '/',
    method = 'GET',
    authType = 'AK',
    style = 'RPC',
    reqBodyType = 'formData',
    bodyType = 'json',
  };
  return callApi(params, req, runtime);
}

/**
 * @summary Stops a cluster.
 *
 * @description If you stop a subscription compute node, its billing is not affected. If you stop a pay-as-you-go compute node for which you have enabled the *economical mode*, you are no longer charged for its computing resources. For more information, see [Economical mode](https://help.aliyun.com/document_detail/63353.html).
 *
 * @param request StopClusterRequest
 * @return StopClusterResponse
 */
async function stopCluster(request: StopClusterRequest): StopClusterResponse {
  var runtime = new $RuntimeOptions{};
  return stopClusterWithOptions(request, runtime);
}

model StopJobsRequest {
  async?: boolean(name='Async', description='Specifies whether to use an asynchronous link to stop the job.

Default value: false', example='false'),
  clusterId?: string(name='ClusterId', description='The ID of the cluster.

You can call the [ListClusters](https://help.aliyun.com/document_detail/87116.html) operation to query the cluster ID.

This parameter is required.', example='ehpc-hz-FYUr32****'),
  jobs?: string(name='Jobs', description='The list of jobs that you want to stop. Maximum number of jobs: 100. Minimum number of jobs: 1.

Format: `[{"Id": "0.sched****"},{"Id": "1.sched****"}]`. Separate multiple jobs with commas (,).

You can call the [ListJobs](https://help.aliyun.com/document_detail/87251.html) operation to query the job ID.

>  You can stop only jobs that are in the RUNNING or QUEUED state.

This parameter is required.', example='[{"Id":"1.sched****"},{"Id":"0.sched****"}]'),
}

model StopJobsResponseBody = {
  requestId?: string(name='RequestId', description='The ID of the request.', example='04F0F334-1335-436C-A1D7-6C044FE7****'),
}

model StopJobsResponse = {
  headers?: map[string]string(name='headers'),
  statusCode?: int32(name='statusCode'),
  body?: StopJobsResponseBody(name='body'),
}

/**
 * @param request StopJobsRequest
 * @param runtime runtime options for this request RuntimeOptions
 * @return StopJobsResponse
 */
async function stopJobsWithOptions(request: StopJobsRequest, runtime: $RuntimeOptions): StopJobsResponse {
  request.validate();
  var query = OpenApiUtil.query(request.toMap());
  var req = new OpenApiUtil.OpenApiRequest{ 
    query = OpenApiUtil.query(query),
  };
  var params = new OpenApiUtil.Params{
    action = 'StopJobs',
    version = '2018-04-12',
    protocol = 'HTTPS',
    pathname = '/',
    method = 'GET',
    authType = 'AK',
    style = 'RPC',
    reqBodyType = 'formData',
    bodyType = 'json',
  };
  return callApi(params, req, runtime);
}

/**
 * @param request StopJobsRequest
 * @return StopJobsResponse
 */
async function stopJobs(request: StopJobsRequest): StopJobsResponse {
  var runtime = new $RuntimeOptions{};
  return stopJobsWithOptions(request, runtime);
}

model StopNodesRequest {
  clusterId?: string(name='ClusterId', description='The ID of the E-HPC cluster.

You can call the [ListClusters](https://help.aliyun.com/document_detail/87116.html) operation to query the cluster ID.

This parameter is required.', example='ehpc-hz-FYUr32****'),
  instance?: [ 
    {
      id?: string(name='Id', description='The ID of the Nth node that you want to stop. Valid values of N: 1 to 100

You can call the [ListNodes](https://help.aliyun.com/document_detail/87161.html) operation to query the IDs of the compute nodes.', example='i-bp13p7vlcb1uihf****'),
    }
  ](name='Instance', description='This parameter is required.'),
  role?: string(name='Role', description='The role of the node. Valid values:

*   Manager: management node
*   Login: logon node
*   Compute: compute node

Default value: Compute', example='Compute'),
}

model StopNodesResponseBody = {
  requestId?: string(name='RequestId', description='The ID of the request.', example='04F0F334-1335-436C-A1D7-6C044FE7****'),
  taskId?: string(name='TaskId', description='The ID of the task.', example='04F0F334-1335-436C-A1D7-6C044FE7****'),
}

model StopNodesResponse = {
  headers?: map[string]string(name='headers'),
  statusCode?: int32(name='statusCode'),
  body?: StopNodesResponseBody(name='body'),
}

/**
 * @param request StopNodesRequest
 * @param runtime runtime options for this request RuntimeOptions
 * @return StopNodesResponse
 */
async function stopNodesWithOptions(request: StopNodesRequest, runtime: $RuntimeOptions): StopNodesResponse {
  request.validate();
  var query = OpenApiUtil.query(request.toMap());
  var req = new OpenApiUtil.OpenApiRequest{ 
    query = OpenApiUtil.query(query),
  };
  var params = new OpenApiUtil.Params{
    action = 'StopNodes',
    version = '2018-04-12',
    protocol = 'HTTPS',
    pathname = '/',
    method = 'GET',
    authType = 'AK',
    style = 'RPC',
    reqBodyType = 'formData',
    bodyType = 'json',
  };
  return callApi(params, req, runtime);
}

/**
 * @param request StopNodesRequest
 * @return StopNodesResponse
 */
async function stopNodes(request: StopNodesRequest): StopNodesResponse {
  var runtime = new $RuntimeOptions{};
  return stopNodesWithOptions(request, runtime);
}

model StopServerlessJobsRequest {
  clusterId?: string(name='ClusterId', description='The ID of the E-HPC cluster.

You can call the [ListClusters](https://help.aliyun.com/document_detail/87116.html) operation to query the cluster ID.

This parameter is required.', example='ehpc-hz-FYUr32****'),
  jobIds?: [ string ](name='JobIds', description='The serverless job IDs or subtask IDs (array jobs).

*   If you specify the job ID of an array job, all subtasks under the array job are stopped.
*   If you specify the ID of a subtask of an array job, only the subtask is stopped.

This parameter is required.'),
}

model StopServerlessJobsResponseBody = {
  requestId?: string(name='RequestId', description='The request ID.', example='04F0F334-1335-436C-A1D7-6C044FE73368'),
}

model StopServerlessJobsResponse = {
  headers?: map[string]string(name='headers'),
  statusCode?: int32(name='statusCode'),
  body?: StopServerlessJobsResponseBody(name='body'),
}

/**
 * @summary Stops Serverless jobs in a cluster based on job IDs or subtask IDs (array jobs). If you specify the job ID of an array job, all subtasks in the job are stopped.
 *
 * @param request StopServerlessJobsRequest
 * @param runtime runtime options for this request RuntimeOptions
 * @return StopServerlessJobsResponse
 */
async function stopServerlessJobsWithOptions(request: StopServerlessJobsRequest, runtime: $RuntimeOptions): StopServerlessJobsResponse {
  request.validate();
  var query = {};
  if (!$isNull(request.clusterId)) {
    query['ClusterId'] = request.clusterId;
  }
  if (!$isNull(request.jobIds)) {
    query['JobIds'] = request.jobIds;
  }
  var req = new OpenApiUtil.OpenApiRequest{ 
    query = OpenApiUtil.query(query),
  };
  var params = new OpenApiUtil.Params{
    action = 'StopServerlessJobs',
    version = '2018-04-12',
    protocol = 'HTTPS',
    pathname = '/',
    method = 'POST',
    authType = 'AK',
    style = 'RPC',
    reqBodyType = 'formData',
    bodyType = 'json',
  };
  return callApi(params, req, runtime);
}

/**
 * @summary Stops Serverless jobs in a cluster based on job IDs or subtask IDs (array jobs). If you specify the job ID of an array job, all subtasks in the job are stopped.
 *
 * @param request StopServerlessJobsRequest
 * @return StopServerlessJobsResponse
 */
async function stopServerlessJobs(request: StopServerlessJobsRequest): StopServerlessJobsResponse {
  var runtime = new $RuntimeOptions{};
  return stopServerlessJobsWithOptions(request, runtime);
}

model StopVisualServiceRequest {
  cidrIp?: string(name='CidrIp', description='The CIDR block or IP address that is allowed to access the VNC service. This parameter is used to assign a security group to the E-HPC cluster.

This parameter is required.', example='``100.168.**.**``'),
  clusterId?: string(name='ClusterId', description='The cluster ID.

You can call the [ListClusters](https://help.aliyun.com/document_detail/87116.html) operation to query the cluster ID.

This parameter is required.', example='ehpc-hz-jeJki6****'),
  port?: int32(name='Port', description='The fixed port. Set the value to 12016.

This parameter is required.', example='12016'),
}

model StopVisualServiceResponseBody = {
  message?: string(name='Message', description='The returned message.', example='Service stopped'),
  requestId?: string(name='RequestId', description='The request ID.', example='896D338C-E4F4-41EC-A154-D605E5DE6880'),
}

model StopVisualServiceResponse = {
  headers?: map[string]string(name='headers'),
  statusCode?: int32(name='statusCode'),
  body?: StopVisualServiceResponseBody(name='body'),
}

/**
 * @summary Stops the remote visualization service of Virtual Network Console (VNC) in a cluster.
 *
 * @param request StopVisualServiceRequest
 * @param runtime runtime options for this request RuntimeOptions
 * @return StopVisualServiceResponse
 */
async function stopVisualServiceWithOptions(request: StopVisualServiceRequest, runtime: $RuntimeOptions): StopVisualServiceResponse {
  request.validate();
  var query = OpenApiUtil.query(request.toMap());
  var req = new OpenApiUtil.OpenApiRequest{ 
    query = OpenApiUtil.query(query),
  };
  var params = new OpenApiUtil.Params{
    action = 'StopVisualService',
    version = '2018-04-12',
    protocol = 'HTTPS',
    pathname = '/',
    method = 'GET',
    authType = 'AK',
    style = 'RPC',
    reqBodyType = 'formData',
    bodyType = 'json',
  };
  return callApi(params, req, runtime);
}

/**
 * @summary Stops the remote visualization service of Virtual Network Console (VNC) in a cluster.
 *
 * @param request StopVisualServiceRequest
 * @return StopVisualServiceResponse
 */
async function stopVisualService(request: StopVisualServiceRequest): StopVisualServiceResponse {
  var runtime = new $RuntimeOptions{};
  return stopVisualServiceWithOptions(request, runtime);
}

model SubmitJobRequest {
  jobRetry?: {
    count?: int32(name='Count', description='The number of retries for the job. Valid values: 1 to 10. You can only retry jobs that are run on the PBS clusters.

>  If this parameter is left empty, the JobRetry.Priority and JobRetry.OnExitCode parameters do not take effect.', example='5'),
    onExitCode?: int32(name='OnExitCode', description='The retry condition of the job. If the exit code is the value of the parameter, the job retry is triggered.

>  If this parameter is left empty, the job retry is triggered when the exit code is not 0.', example='1'),
    priority?: int32(name='Priority', description='The priority of the job retry. Valid values: 0 to 9. A larger value indicates a higher priority.

>  If this parameter is left empty, the priority of the job retry is min {Priority of the original job +1, 9}.', example='1'),
  }(name='JobRetry'),
  arrayRequest?: string(name='ArrayRequest', description='The job array.

Format: X-Y:Z. The minimum index value X is the first index. The maximum index value Y is the last index. Z is the step size. For example, 2-7:2 indicates that three jobs need to be run and their index values are 2, 4, and 6.', example='1-10:2'),
  async?: boolean(name='Async', description='Specifies whether to use an asynchronous link to submit the job.

Default value: false.', example='false'),
  clockTime?: string(name='ClockTime', description='The maximum running time of the job. Valid formats:

*   hh:mm:ss
*   mm:ss
*   ss

We recommend that you use the hh:mm:ss format. If the maximum running time is 12 hours, set the value to 12:00:00.', example='12:00:00'),
  clusterId?: string(name='ClusterId', description='The command that is used to run the job.

This parameter is required.', example='ehpc-hz-FYUr32****'),
  commandLine?: string(name='CommandLine', description='The name of the user that runs the job.

You can call the [ListUsers](https://help.aliyun.com/document_detail/188572.html) operation to query the users of the cluster.

This parameter is required.', example='./LammpsTest/lammps.pbs'),
  cpu?: int32(name='Cpu', description='The number of CPU cores required by a single compute node.', example='2'),
  gpu?: int32(name='Gpu', description='The maximum GPU usage required by a single compute node.

The parameter takes effect only when the cluster uses PBS and a compute node is a GPU-accelerated instance.', example='1'),
  inputFileUrl?: string(name='InputFileUrl', description='The URL of the job file that is uploaded to an Object Storage Service (OSS) bucket.'),
  jobQueue?: string(name='JobQueue', description='The name of the queue in which the job is run.

You can call the [ListQueues](https://help.aliyun.com/document_detail/92176.html) operation to query the name of the queue.', example='workq'),
  mem?: string(name='Mem', description='The maximum memory usage required by a single compute node. Unit: GB, MB, or KB. The unit is case-insensitive.', example='1GB'),
  name?: string(name='Name', description='job1', example='jobtest'),
  node?: int32(name='Node', description='The number of compute nodes required to run the job.

> If the parameter is not specified, the Cpu, Task, Thread, Mem, and Gpu parameters become invalid.', example='2'),
  packagePath?: string(name='PackagePath', description='The path that is used to run the job.', example='./Tem'),
  postCmdLine?: string(name='PostCmdLine', description='The command to perform on the job after the job is submitted.', example='example.sh'),
  priority?: int32(name='Priority', description='The priority of the job. Valid values: 0 to 9. A larger value indicates a higher priority.

Default value: 0.', example='0'),
  reRunable?: boolean(name='ReRunable', description='Specifies whether the job can be rerun. Valid values:

*   true: The job can be rerun.
*   false: The job cannot be rerun.', example='false'),
  runasUser?: string(name='RunasUser', description='The password that corresponds to the username.

This parameter is required.', example='testuser'),
  runasUserPassword?: string(name='RunasUserPassword', description='The name of the job. The name must be 6 to 30 characters in length and start with a letter. It can contain letters, digits, and periods (.).', example='12****'),
  stderrRedirectPath?: string(name='StderrRedirectPath', description='The output file path of stderr.', example='./LammpsTest'),
  stdoutRedirectPath?: string(name='StdoutRedirectPath', description='The output file path of stdout.', example='./LammpsTest'),
  task?: int32(name='Task', description='The number of processes created for a single compute node.

The parameter is applicable to Message Passing Interface (MPI) jobs.', example='2'),
  thread?: int32(name='Thread', description='The number of threads created for a single compute node.

The parameter is applicable to OpenMP jobs.', example='1'),
  unzipCmd?: string(name='UnzipCmd', description='The command for file decompression. The command that is used to decompress the job files downloaded from an OSS bucket. Valid values:

*   tar xzf: Decompresses GZIP files.
*   tar xf: Decompresses TAR files.
*   unzip: Decompresses ZIP files.', example='tar xzf'),
  variables?: string(name='Variables', description='The runtime variables passed to the job. They can be accessed by using environment variables in the executable file.', example='[{Name:test1,Value:value1},{Name:test2,Value:value2}]'),
}

model SubmitJobResponseBody = {
  jobId?: string(name='JobId', description='The ID of the job.', example='1.manager'),
  requestId?: string(name='RequestId', description='The ID of the request.', example='04F0F334-1335-436C-A1D7-6C044FE7****'),
}

model SubmitJobResponse = {
  headers?: map[string]string(name='headers'),
  statusCode?: int32(name='statusCode'),
  body?: SubmitJobResponseBody(name='body'),
}

/**
 * @summary Submits a job in a cluster.
 *
 * @description The ID of the request.
 *
 * @param request SubmitJobRequest
 * @param runtime runtime options for this request RuntimeOptions
 * @return SubmitJobResponse
 */
async function submitJobWithOptions(request: SubmitJobRequest, runtime: $RuntimeOptions): SubmitJobResponse {
  request.validate();
  var query = OpenApiUtil.query(request.toMap());
  var req = new OpenApiUtil.OpenApiRequest{ 
    query = OpenApiUtil.query(query),
  };
  var params = new OpenApiUtil.Params{
    action = 'SubmitJob',
    version = '2018-04-12',
    protocol = 'HTTPS',
    pathname = '/',
    method = 'GET',
    authType = 'AK',
    style = 'RPC',
    reqBodyType = 'formData',
    bodyType = 'json',
  };
  return callApi(params, req, runtime);
}

/**
 * @summary Submits a job in a cluster.
 *
 * @description The ID of the request.
 *
 * @param request SubmitJobRequest
 * @return SubmitJobResponse
 */
async function submitJob(request: SubmitJobRequest): SubmitJobResponse {
  var runtime = new $RuntimeOptions{};
  return submitJobWithOptions(request, runtime);
}

model SubmitServerlessJobRequest {
  arrayProperties?: {
    indexEnd?: long(name='IndexEnd', description='The end value of the array job index. Valid values: 0 to 4999. The value must be greater than or equal to the value of IndexStart.', example='5'),
    indexStart?: long(name='IndexStart', description='The starting value of the array job index. Valid values: 0 to 4999.', example='1'),
    indexStep?: long(name='IndexStep', description='The interval of the array job index.

>  If the array job property is IndexStart=1,IndexEnd=5, and IndexStep=2, the array job contains three subtasks. The values of the subtask indexes are 1,3, and 5.', example='2'),
  }(name='ArrayProperties', description='The configuration of the array job.

>  The value of an array job index is passed to a serverless job container through the environment variable `EHPC_ARRAY_TASK_ID`. Users can access the container from business programs.'),
  clusterId?: string(name='ClusterId', description='The cluster ID.

You can call the [ListClusters](https://help.aliyun.com/document_detail/87116.html) operation to query the cluster ID.

This parameter is required.', example='ehpc-hz-FYUr32****'),
  container?: {
    arg?: [ string ](name='Arg', description='The arguments of the container startup command. You can specify up to 10 arguments.'),
    command?: [ string ](name='Command', description='The container startup commands.'),
    environmentVar?: [ 
      {
        key?: string(name='Key', description='The name of the environment variable for the container. The name can be 1 to 128 characters in length and can contain letters, digits, and underscores (_). The name cannot start with a digit. Specify the name in the [0-9a-zA-Z] format.', example='PATH'),
        value?: string(name='Value', description='The value of the environment variable for the container. The value must be 0 to 256 bits in length.', example='/usr/local/bin'),
      }
    ](name='EnvironmentVar', description='The value of the environment variable for the container.'),
    gpu?: int32(name='Gpu', description='The number of GPUs used by the container.', example='1'),
    image?: string(name='Image', description='The container image.

This parameter is required.', example='registry-vpc.cn-hangzhou.aliyuncs.com/ehpc/hpl:latest'),
    volumeMount?: [ 
      {
        flexVolumeDriver?: string(name='FlexVolumeDriver', description='The driver type when you use the FlexVolume plug-in to mount a volume. Valid values:

*   alicloud/nas: a NAS driver.
*   alicloud/oss: an OSS driver.', example='alicloud/oss'),
        flexVolumeOptions?: string(name='FlexVolumeOptions', description='The options of the FlexVolume object. Each option is a key-value pair in a JSON string.', example='{"bucket":"hpctest","url": "oss-cn-hangzhou-internal.aliyuncs.com
","path":"/data","ramRole":"AliyunECSInstanceForEHPCRole"}'),
        mountPath?: string(name='MountPath', description='The directory to which the volume is mounted.

>  The data stored in this directory is overwritten by the data on the volume. Exercise caution when you specify this parameter.', example='/data'),
      }
    ](name='VolumeMount', description='The data volumes that are mounted to the container.'),
    workingDir?: string(name='WorkingDir', description='The working directory of the container.', example='/usr/local/'),
  }(name='Container', description='The properties of the Serverless job container.

This parameter is required.'),
  cpu?: float(name='Cpu', description='The vCPU size of the serverless job container. Unit: cores.', example='2'),
  dependsOn?: [ 
    {
      jobId?: string(name='JobId', description='The ID of the dependent job.', example='10'),
      type?: string(name='Type', description='The dependency type. Valid values:

*   AfterSucceeded: **All subtasks** of the dependent job or array job succeed. The exit code is 0.
*   AfterFailed: **All subtasks** of the dependent job or array job fail. The exit code is not 0.
*   AfterAny: The dependent job completes (succeeds or fails).
*   AfterCorresponding: The subtask corresponding to the dependent array job succeeds. The exit code is 0.

Default value: AfterSucceeded.', example='AfterAny'),
    }
  ](name='DependsOn', description='The dependencies of the serverless job.'),
  ephemeralStorage?: int32(name='EphemeralStorage', description='The size of the temporary storage space added to the serverless job container. Unit: GiB.

>  By default, a space of 30 GiB is provided free of charge. If you require a larger space, you can pass this parameter to specify your required space size.', example='200'),
  instanceType?: [ string ](name='InstanceType', description='The Elastic Compute Service (ECS) instance types used by the serverless job container.'),
  jobName?: string(name='JobName', description='The name of the serverless job.

>  The name can contain lowercase letters, digits, and hyphens (-). It cannot start or end with a hyphen.

This parameter is required.', example='testjob'),
  jobPriority?: long(name='JobPriority', description='The scheduling priority of the serverless job. Valid values: 0 to 999. A greater value indicates a higher priority.', example='10'),
  memory?: float(name='Memory', description='The memory size of the serverless job container. Unit: GiB.', example='4'),
  ramRoleName?: string(name='RamRoleName', description='The Resource Access Manamement (RAM) role that is associated with the Serverless job container.', example='testRamRoleName'),
  retryStrategy?: {
    attempts?: int32(name='Attempts', description='The number of retries for the serverless job. Valid values: 1 to 10.', example='5'),
    evaluateOnExit?: [ 
      {
        action?: string(name='Action', description='The job action. Valid values:

*   Retry: The job starts a retry when a specific exit code is hit.
*   Exit: The job exits when a specific exit code is hit.', example='Retry'),
        onExitCode?: string(name='OnExitCode', description='The job exit code, which is used together with Action to form a job retry rule. Valid values: 0 to 255.', example='10'),
      }
    ](name='EvaluateOnExit', description='The retry rules for the serverless job. You can specify up to 10 rules.'),
  }(name='RetryStrategy', description='The retry policy of the serverless job.'),
  spotPriceLimit?: float(name='SpotPriceLimit', description='The maximum hourly price of the preemptible elastic container instance. The value can be accurate to three decimal places.

If you set SpotStrategy to SpotWithPriceLimit, you must specify the SpotPriceLimit parameter.', example='0.062'),
  spotStrategy?: string(name='SpotStrategy', description='The bidding policy of the ECS instances. Valid values:

*   NoSpot: The instance is created as a pay-as-you-go instance.
*   SpotWithPriceLimit: The instance is created as a preemptible instance for which you specify the maximum hourly price.
*   SpotAsPriceGo: The instance is created as a preemptible instance for which the market price at the time of purchase is automatically used as the bid price.

Default value: NoSpot.', example='SpotWithPriceLimit'),
  timeout?: long(name='Timeout', description='The validity period of the serverless job. After the validity period expires, the job is forcibly terminated. Unit: seconds.', example='3600'),
  vSwitchId?: [ string ](name='VSwitchId', description='The IDs of the vSwitches to which the serverless job container belongs.'),
}

model SubmitServerlessJobShrinkRequest {
  arrayPropertiesShrink?: string(name='ArrayProperties', description='The configuration of the array job.

>  The value of an array job index is passed to a serverless job container through the environment variable `EHPC_ARRAY_TASK_ID`. Users can access the container from business programs.'),
  clusterId?: string(name='ClusterId', description='The cluster ID.

You can call the [ListClusters](https://help.aliyun.com/document_detail/87116.html) operation to query the cluster ID.

This parameter is required.', example='ehpc-hz-FYUr32****'),
  containerShrink?: string(name='Container', description='The properties of the Serverless job container.

This parameter is required.'),
  cpu?: float(name='Cpu', description='The vCPU size of the serverless job container. Unit: cores.', example='2'),
  dependsOnShrink?: string(name='DependsOn', description='The dependencies of the serverless job.'),
  ephemeralStorage?: int32(name='EphemeralStorage', description='The size of the temporary storage space added to the serverless job container. Unit: GiB.

>  By default, a space of 30 GiB is provided free of charge. If you require a larger space, you can pass this parameter to specify your required space size.', example='200'),
  instanceTypeShrink?: string(name='InstanceType', description='The Elastic Compute Service (ECS) instance types used by the serverless job container.'),
  jobName?: string(name='JobName', description='The name of the serverless job.

>  The name can contain lowercase letters, digits, and hyphens (-). It cannot start or end with a hyphen.

This parameter is required.', example='testjob'),
  jobPriority?: long(name='JobPriority', description='The scheduling priority of the serverless job. Valid values: 0 to 999. A greater value indicates a higher priority.', example='10'),
  memory?: float(name='Memory', description='The memory size of the serverless job container. Unit: GiB.', example='4'),
  ramRoleName?: string(name='RamRoleName', description='The Resource Access Manamement (RAM) role that is associated with the Serverless job container.', example='testRamRoleName'),
  retryStrategyShrink?: string(name='RetryStrategy', description='The retry policy of the serverless job.'),
  spotPriceLimit?: float(name='SpotPriceLimit', description='The maximum hourly price of the preemptible elastic container instance. The value can be accurate to three decimal places.

If you set SpotStrategy to SpotWithPriceLimit, you must specify the SpotPriceLimit parameter.', example='0.062'),
  spotStrategy?: string(name='SpotStrategy', description='The bidding policy of the ECS instances. Valid values:

*   NoSpot: The instance is created as a pay-as-you-go instance.
*   SpotWithPriceLimit: The instance is created as a preemptible instance for which you specify the maximum hourly price.
*   SpotAsPriceGo: The instance is created as a preemptible instance for which the market price at the time of purchase is automatically used as the bid price.

Default value: NoSpot.', example='SpotWithPriceLimit'),
  timeout?: long(name='Timeout', description='The validity period of the serverless job. After the validity period expires, the job is forcibly terminated. Unit: seconds.', example='3600'),
  vSwitchIdShrink?: string(name='VSwitchId', description='The IDs of the vSwitches to which the serverless job container belongs.'),
}

model SubmitServerlessJobResponseBody = {
  jobId?: string(name='JobId', description='The ID of the serverless job.', example='10'),
  requestId?: string(name='RequestId', description='The request ID.', example='04F0F334-1335-436C-A1D7-6C044FE73368'),
}

model SubmitServerlessJobResponse = {
  headers?: map[string]string(name='headers'),
  statusCode?: int32(name='statusCode'),
  body?: SubmitServerlessJobResponseBody(name='body'),
}

/**
 * @summary Submits a serverless job to an Elastic High Performance Computing (E-HPC) cluster.
 *
 * @param tmpReq SubmitServerlessJobRequest
 * @param runtime runtime options for this request RuntimeOptions
 * @return SubmitServerlessJobResponse
 */
async function submitServerlessJobWithOptions(tmpReq: SubmitServerlessJobRequest, runtime: $RuntimeOptions): SubmitServerlessJobResponse {
  tmpReq.validate();
  var request = new SubmitServerlessJobShrinkRequest{};
  OpenApiUtil.convert(tmpReq, request);
  if (!$isNull(tmpReq.arrayProperties)) {
    request.arrayPropertiesShrink = OpenApiUtil.arrayToStringWithSpecifiedStyle(tmpReq.arrayProperties, 'ArrayProperties', 'json');
  }
  if (!$isNull(tmpReq.container)) {
    request.containerShrink = OpenApiUtil.arrayToStringWithSpecifiedStyle(tmpReq.container, 'Container', 'json');
  }
  if (!$isNull(tmpReq.dependsOn)) {
    request.dependsOnShrink = OpenApiUtil.arrayToStringWithSpecifiedStyle(tmpReq.dependsOn, 'DependsOn', 'json');
  }
  if (!$isNull(tmpReq.instanceType)) {
    request.instanceTypeShrink = OpenApiUtil.arrayToStringWithSpecifiedStyle(tmpReq.instanceType, 'InstanceType', 'json');
  }
  if (!$isNull(tmpReq.retryStrategy)) {
    request.retryStrategyShrink = OpenApiUtil.arrayToStringWithSpecifiedStyle(tmpReq.retryStrategy, 'RetryStrategy', 'json');
  }
  if (!$isNull(tmpReq.vSwitchId)) {
    request.vSwitchIdShrink = OpenApiUtil.arrayToStringWithSpecifiedStyle(tmpReq.vSwitchId, 'VSwitchId', 'json');
  }
  var query = {};
  if (!$isNull(request.arrayPropertiesShrink)) {
    query['ArrayProperties'] = request.arrayPropertiesShrink;
  }
  if (!$isNull(request.clusterId)) {
    query['ClusterId'] = request.clusterId;
  }
  if (!$isNull(request.containerShrink)) {
    query['Container'] = request.containerShrink;
  }
  if (!$isNull(request.cpu)) {
    query['Cpu'] = request.cpu;
  }
  if (!$isNull(request.dependsOnShrink)) {
    query['DependsOn'] = request.dependsOnShrink;
  }
  if (!$isNull(request.ephemeralStorage)) {
    query['EphemeralStorage'] = request.ephemeralStorage;
  }
  if (!$isNull(request.instanceTypeShrink)) {
    query['InstanceType'] = request.instanceTypeShrink;
  }
  if (!$isNull(request.jobName)) {
    query['JobName'] = request.jobName;
  }
  if (!$isNull(request.jobPriority)) {
    query['JobPriority'] = request.jobPriority;
  }
  if (!$isNull(request.memory)) {
    query['Memory'] = request.memory;
  }
  if (!$isNull(request.ramRoleName)) {
    query['RamRoleName'] = request.ramRoleName;
  }
  if (!$isNull(request.retryStrategyShrink)) {
    query['RetryStrategy'] = request.retryStrategyShrink;
  }
  if (!$isNull(request.spotPriceLimit)) {
    query['SpotPriceLimit'] = request.spotPriceLimit;
  }
  if (!$isNull(request.spotStrategy)) {
    query['SpotStrategy'] = request.spotStrategy;
  }
  if (!$isNull(request.timeout)) {
    query['Timeout'] = request.timeout;
  }
  if (!$isNull(request.vSwitchIdShrink)) {
    query['VSwitchId'] = request.vSwitchIdShrink;
  }
  var req = new OpenApiUtil.OpenApiRequest{ 
    query = OpenApiUtil.query(query),
  };
  var params = new OpenApiUtil.Params{
    action = 'SubmitServerlessJob',
    version = '2018-04-12',
    protocol = 'HTTPS',
    pathname = '/',
    method = 'POST',
    authType = 'AK',
    style = 'RPC',
    reqBodyType = 'formData',
    bodyType = 'json',
  };
  return callApi(params, req, runtime);
}

/**
 * @summary Submits a serverless job to an Elastic High Performance Computing (E-HPC) cluster.
 *
 * @param request SubmitServerlessJobRequest
 * @return SubmitServerlessJobResponse
 */
async function submitServerlessJob(request: SubmitServerlessJobRequest): SubmitServerlessJobResponse {
  var runtime = new $RuntimeOptions{};
  return submitServerlessJobWithOptions(request, runtime);
}

model SyncUsersRequest {
  clusterId?: string(name='ClusterId', description='The cluster ID.

You can call the [ListClusters](https://help.aliyun.com/document_detail/87116.html) operation to query the list of E-HPC clusters.

This parameter is required.', example='ehpc-hz-gh5WKb****'),
  regionId?: string(name='RegionId', description='The region ID.

You can call the [ListRegions](https://help.aliyun.com/document_detail/188593.html) operation to query the list of regions where E-HPC is supported.

This parameter is required.', example='cn-hangzhou'),
}

model SyncUsersResponseBody = {
  requestId?: string(name='RequestId', description='The request ID.', example='04F0F334-1335-436C-A1D7-6C044FE7****'),
}

model SyncUsersResponse = {
  headers?: map[string]string(name='headers'),
  statusCode?: int32(name='statusCode'),
  body?: SyncUsersResponseBody(name='body'),
}

/**
 * @summary Synchronizes local cluster users to a hybrid cloud cluster in hybrid-cloud proxy mode.
 *
 * @param request SyncUsersRequest
 * @param runtime runtime options for this request RuntimeOptions
 * @return SyncUsersResponse
 */
async function syncUsersWithOptions(request: SyncUsersRequest, runtime: $RuntimeOptions): SyncUsersResponse {
  request.validate();
  var query = OpenApiUtil.query(request.toMap());
  var req = new OpenApiUtil.OpenApiRequest{ 
    query = OpenApiUtil.query(query),
  };
  var params = new OpenApiUtil.Params{
    action = 'SyncUsers',
    version = '2018-04-12',
    protocol = 'HTTPS',
    pathname = '/',
    method = 'GET',
    authType = 'AK',
    style = 'RPC',
    reqBodyType = 'formData',
    bodyType = 'json',
  };
  return callApi(params, req, runtime);
}

/**
 * @summary Synchronizes local cluster users to a hybrid cloud cluster in hybrid-cloud proxy mode.
 *
 * @param request SyncUsersRequest
 * @return SyncUsersResponse
 */
async function syncUsers(request: SyncUsersRequest): SyncUsersResponse {
  var runtime = new $RuntimeOptions{};
  return syncUsersWithOptions(request, runtime);
}

model TagResourcesRequest {
  regionId?: string(name='RegionId', description='The region ID of the resource.

This parameter is required.', example='cn-hangzhou'),
  resourceId?: [ string ](name='ResourceId', description='The resource IDs. You can specify up to 50 resource IDs.

This parameter is required.'),
  resourceType?: string(name='ResourceType', description='The resource type. Set the value to cluster, which indicates E-HPC clusters.

This parameter is required.', example='cluster'),
  tag?: [ 
    {
      key?: string(name='Key', description='The tag key. The tag key cannot be an empty string. The tag key can be up to 128 characters in length and cannot contain `http://` or `https://`. The tag key cannot start with `acs:` or `aliyun`.', example='TestKey'),
      value?: string(name='Value', description='The tag value. The tag value cannot be an empty string. It can be up to 128 characters in length and cannot contain `http://` or `https://`. It cannot start with `acs:` or `aliyun`.', example='TestValue'),
    }
  ](name='Tag', description='The resource tags. You can specify up to 20 tags.

This parameter is required.'),
}

model TagResourcesResponseBody = {
  requestId?: string(name='RequestId', description='The request ID.', example='473469C7-AA6F-4DC5-B3DB-A3DC0DE3C83E'),
}

model TagResourcesResponse = {
  headers?: map[string]string(name='headers'),
  statusCode?: int32(name='statusCode'),
  body?: TagResourcesResponseBody(name='body'),
}

/**
 * @summary Creates tags and attach the tags to a specified resource.
 *
 * @param request TagResourcesRequest
 * @param runtime runtime options for this request RuntimeOptions
 * @return TagResourcesResponse
 */
async function tagResourcesWithOptions(request: TagResourcesRequest, runtime: $RuntimeOptions): TagResourcesResponse {
  request.validate();
  var query = {};
  if (!$isNull(request.regionId)) {
    query['RegionId'] = request.regionId;
  }
  if (!$isNull(request.resourceId)) {
    query['ResourceId'] = request.resourceId;
  }
  if (!$isNull(request.resourceType)) {
    query['ResourceType'] = request.resourceType;
  }
  if (!$isNull(request.tag)) {
    query['Tag'] = request.tag;
  }
  var req = new OpenApiUtil.OpenApiRequest{ 
    query = OpenApiUtil.query(query),
  };
  var params = new OpenApiUtil.Params{
    action = 'TagResources',
    version = '2018-04-12',
    protocol = 'HTTPS',
    pathname = '/',
    method = 'POST',
    authType = 'AK',
    style = 'RPC',
    reqBodyType = 'formData',
    bodyType = 'json',
  };
  return callApi(params, req, runtime);
}

/**
 * @summary Creates tags and attach the tags to a specified resource.
 *
 * @param request TagResourcesRequest
 * @return TagResourcesResponse
 */
async function tagResources(request: TagResourcesRequest): TagResourcesResponse {
  var runtime = new $RuntimeOptions{};
  return tagResourcesWithOptions(request, runtime);
}

model UnTagResourcesRequest {
  all?: boolean(name='All', description='Specifies whether to remove all tags from the resource. This parameter is valid only when the TagKey.N parameter is not specified. Valid values:

*   true
*   false

Default value: false.', example='false'),
  regionId?: string(name='RegionId', description='The region ID of the resource.', example='cn-hangzhou'),
  resourceId?: [ string ](name='ResourceId', description='The resource IDs. You can specify up to 50 resource IDs.

This parameter is required.'),
  resourceType?: string(name='ResourceType', description='The type of the resource from which you want to remove tags. Set the value to cluster, which indicates E-HPC clusters.

This parameter is required.', example='cluster'),
  tagKey?: [ string ](name='TagKey', description='The tag key of the resource. You can specify up to 20 tag keys.'),
}

model UnTagResourcesResponseBody = {
  requestId?: string(name='RequestId', description='The request ID.', example='04F0F334-1335-436C-A1D7-6C044FE73368'),
}

model UnTagResourcesResponse = {
  headers?: map[string]string(name='headers'),
  statusCode?: int32(name='statusCode'),
  body?: UnTagResourcesResponseBody(name='body'),
}

/**
 * @summary Removes tags from a specified resource.
 *
 * @param request UnTagResourcesRequest
 * @param runtime runtime options for this request RuntimeOptions
 * @return UnTagResourcesResponse
 */
async function unTagResourcesWithOptions(request: UnTagResourcesRequest, runtime: $RuntimeOptions): UnTagResourcesResponse {
  request.validate();
  var query = {};
  if (!$isNull(request.all)) {
    query['All'] = request.all;
  }
  if (!$isNull(request.regionId)) {
    query['RegionId'] = request.regionId;
  }
  if (!$isNull(request.resourceId)) {
    query['ResourceId'] = request.resourceId;
  }
  if (!$isNull(request.resourceType)) {
    query['ResourceType'] = request.resourceType;
  }
  if (!$isNull(request.tagKey)) {
    query['TagKey'] = request.tagKey;
  }
  var req = new OpenApiUtil.OpenApiRequest{ 
    query = OpenApiUtil.query(query),
  };
  var params = new OpenApiUtil.Params{
    action = 'UnTagResources',
    version = '2018-04-12',
    protocol = 'HTTPS',
    pathname = '/',
    method = 'POST',
    authType = 'AK',
    style = 'RPC',
    reqBodyType = 'formData',
    bodyType = 'json',
  };
  return callApi(params, req, runtime);
}

/**
 * @summary Removes tags from a specified resource.
 *
 * @param request UnTagResourcesRequest
 * @return UnTagResourcesResponse
 */
async function unTagResources(request: UnTagResourcesRequest): UnTagResourcesResponse {
  var runtime = new $RuntimeOptions{};
  return unTagResourcesWithOptions(request, runtime);
}

model UninstallSoftwareRequest {
  application?: string(name='Application', description='The name of the software that you want to uninstall.

You can call the [ListInstalledSoftware](https://help.aliyun.com/document_detail/188591.html) operation to query the software that is installed in the cluster.

This parameter is required.', example='ABYSS_2.1.5'),
  clusterId?: string(name='ClusterId', description='The cluster ID.

You can call the [ListClusters](https://help.aliyun.com/document_detail/87116.html) operation to query the cluster ID.

This parameter is required.', example='ehpc-hz-jeJki6****'),
}

model UninstallSoftwareResponseBody = {
  requestId?: string(name='RequestId', description='The request ID.', example='C84FB8EF-5580-4B82-9BDE-6657814C****'),
}

model UninstallSoftwareResponse = {
  headers?: map[string]string(name='headers'),
  statusCode?: int32(name='statusCode'),
  body?: UninstallSoftwareResponseBody(name='body'),
}

/**
 * @summary Uninstalls software from a cluster.
 *
 * @param request UninstallSoftwareRequest
 * @param runtime runtime options for this request RuntimeOptions
 * @return UninstallSoftwareResponse
 */
async function uninstallSoftwareWithOptions(request: UninstallSoftwareRequest, runtime: $RuntimeOptions): UninstallSoftwareResponse {
  request.validate();
  var query = OpenApiUtil.query(request.toMap());
  var req = new OpenApiUtil.OpenApiRequest{ 
    query = OpenApiUtil.query(query),
  };
  var params = new OpenApiUtil.Params{
    action = 'UninstallSoftware',
    version = '2018-04-12',
    protocol = 'HTTPS',
    pathname = '/',
    method = 'GET',
    authType = 'AK',
    style = 'RPC',
    reqBodyType = 'formData',
    bodyType = 'json',
  };
  return callApi(params, req, runtime);
}

/**
 * @summary Uninstalls software from a cluster.
 *
 * @param request UninstallSoftwareRequest
 * @return UninstallSoftwareResponse
 */
async function uninstallSoftware(request: UninstallSoftwareRequest): UninstallSoftwareResponse {
  var runtime = new $RuntimeOptions{};
  return uninstallSoftwareWithOptions(request, runtime);
}

model UpdateClusterVolumesRequest {
  additionalVolumes?: [ 
    {
      jobQueue?: string(name='JobQueue', description='The queue name of the file system to be mounted.', example='work'),
      localDirectory?: string(name='LocalDirectory', description='The on-premises mount directory of the file system to be mounted.', example='/ff'),
      location?: string(name='Location', description='The storage location of the file system to be mounted. Valid values:

*   OnPremise: The file system is stored in a hybrid cloud.
*   PublicCloud: The file system cluster is stored in a public cloud.', example='PublicCloud'),
      remoteDirectory?: string(name='RemoteDirectory', description='The remote directory to which the file system is mounted.', example='/test'),
      roles?: [ 
        {
          name?: string(name='Name', description='The type of the node to which the file system is mounted. Valid values:

*   Manager: management node
*   Login: logon node
*   Compute: compute node', example='["Compute"]'),
        }
      ](name='Roles', description='The array of the nodes to which the file system is mounted.'),
      volumeId?: string(name='VolumeId', description='The ID of the file system to be mounted.', example='extreme-00b88****'),
      volumeMountOption?: string(name='VolumeMountOption', description='The mount option of the file system to be mounted.', example='-t nfs -o vers=3,nolock,noresvport'),
      volumeMountpoint?: string(name='VolumeMountpoint', description='The endpoint of the mount target of the file system.', example='0088****-sihc.cn-hangzhou.extreme.nas.aliyuncs.com'),
      volumeProtocol?: string(name='VolumeProtocol', description='The protocol type of the file system to be mounted. Valid values:

*   NFS
*   SMB', example='NFS'),
      volumeType?: string(name='VolumeType', description='The type of the file system to be mounted. Set the value to NAS.', example='NAS'),
    }
  ](name='AdditionalVolumes', description='The file systems that you want to mount.'),
  clusterId?: string(name='ClusterId', description='The ID of the cluster.

This parameter is required.', example='ehpc-hz-FYUr32****'),
}

model UpdateClusterVolumesResponseBody = {
  requestId?: string(name='RequestId', description='The ID of the request.', example='F6757FA4-8FED-4602-B7F5-3550C0842122'),
}

model UpdateClusterVolumesResponse = {
  headers?: map[string]string(name='headers'),
  statusCode?: int32(name='statusCode'),
  body?: UpdateClusterVolumesResponseBody(name='body'),
}

/**
 * @summary Mount new storage resources to a cluster.
 *
 * @param request UpdateClusterVolumesRequest
 * @param runtime runtime options for this request RuntimeOptions
 * @return UpdateClusterVolumesResponse
 */
async function updateClusterVolumesWithOptions(request: UpdateClusterVolumesRequest, runtime: $RuntimeOptions): UpdateClusterVolumesResponse {
  request.validate();
  var query = OpenApiUtil.query(request.toMap());
  var req = new OpenApiUtil.OpenApiRequest{ 
    query = OpenApiUtil.query(query),
  };
  var params = new OpenApiUtil.Params{
    action = 'UpdateClusterVolumes',
    version = '2018-04-12',
    protocol = 'HTTPS',
    pathname = '/',
    method = 'GET',
    authType = 'AK',
    style = 'RPC',
    reqBodyType = 'formData',
    bodyType = 'json',
  };
  return callApi(params, req, runtime);
}

/**
 * @summary Mount new storage resources to a cluster.
 *
 * @param request UpdateClusterVolumesRequest
 * @return UpdateClusterVolumesResponse
 */
async function updateClusterVolumes(request: UpdateClusterVolumesRequest): UpdateClusterVolumesResponse {
  var runtime = new $RuntimeOptions{};
  return updateClusterVolumesWithOptions(request, runtime);
}

model UpdateQueueConfigRequest {
  clusterId?: string(name='ClusterId', description='The ID of the E-HPC cluster.

You can call the [ListClusters](https://help.aliyun.com/document_detail/87116.html) operation to query the cluster ID.

This parameter is required.', example='ehpc-hz-FYUr32****'),
  computeInstanceType?: string(name='ComputeInstanceType', description='The instance type of the node.

You can call the [ListPreferredEcsTypes](https://help.aliyun.com/document_detail/188592.html) operation to query the recommended instance types.', example='ecs.n1.tiny'),
  deploymentSetId?: string(name='DeploymentSetId', description='The ID of the deployment set. You can obtain the deployment set ID by calling the [DescribeDeploymentSets](https://help.aliyun.com/document_detail/91313.html) operation. Only the deployment sets that use low latency policy are supported.', example='ds-bp1frxuzdg87zh4pzq****'),
  networkInterfaceTrafficMode?: string(name='NetworkInterfaceTrafficMode', description='The communication mode of the elastic network interface (ENI). Valid values:

*   Standard: uses the TCP communication mode.
*   HighPerformance: uses the remote direct memory access (RDMA) communication mode with Elastic RDMA Interface (ERI) enabled.', example='Standard'),
  queueName?: string(name='QueueName', description='The name of the queue.

This parameter is required.', example='workq'),
  resourceGroupId?: string(name='ResourceGroupId', description='The resource group ID.

You can call the [ListResourceGroups](https://help.aliyun.com/document_detail/158855.html) operation to query the IDs of resource groups.', example='rg-acfmxazb4ph****'),
}

model UpdateQueueConfigResponseBody = {
  requestId?: string(name='RequestId', description='The request ID.', example='5198C3E8-85F5-4280-8547-687C1710****'),
}

model UpdateQueueConfigResponse = {
  headers?: map[string]string(name='headers'),
  statusCode?: int32(name='statusCode'),
  body?: UpdateQueueConfigResponseBody(name='body'),
}

/**
 * @summary Updates the resource group information and the instance types of compute nodes for a queue of a cluster.
 *
 * @description After you update the resource group, the nodes that you add by scaling out the cluster are automatically included in the resource group.
 *
 * @param request UpdateQueueConfigRequest
 * @param runtime runtime options for this request RuntimeOptions
 * @return UpdateQueueConfigResponse
 */
async function updateQueueConfigWithOptions(request: UpdateQueueConfigRequest, runtime: $RuntimeOptions): UpdateQueueConfigResponse {
  request.validate();
  var query = OpenApiUtil.query(request.toMap());
  var req = new OpenApiUtil.OpenApiRequest{ 
    query = OpenApiUtil.query(query),
  };
  var params = new OpenApiUtil.Params{
    action = 'UpdateQueueConfig',
    version = '2018-04-12',
    protocol = 'HTTPS',
    pathname = '/',
    method = 'GET',
    authType = 'AK',
    style = 'RPC',
    reqBodyType = 'formData',
    bodyType = 'json',
  };
  return callApi(params, req, runtime);
}

/**
 * @summary Updates the resource group information and the instance types of compute nodes for a queue of a cluster.
 *
 * @description After you update the resource group, the nodes that you add by scaling out the cluster are automatically included in the resource group.
 *
 * @param request UpdateQueueConfigRequest
 * @return UpdateQueueConfigResponse
 */
async function updateQueueConfig(request: UpdateQueueConfigRequest): UpdateQueueConfigResponse {
  var runtime = new $RuntimeOptions{};
  return updateQueueConfigWithOptions(request, runtime);
}

model UpgradeClientRequest {
  clientVersion?: string(name='ClientVersion', description='The version to which you want to update ehpcutil. By default, ehpcutil is updated to the latest version. You can call the [ListCurrentClientVersion](https://help.aliyun.com/document_detail/87223.html) to query the latest ehpcutil version.', example='2.0.0'),
  clusterId?: string(name='ClusterId', description='The cluster ID.

This parameter is required.', example='ehpc-hz-FYUr32****'),
}

model UpgradeClientResponseBody = {
  requestId?: string(name='RequestId', description='The request ID.', example='4994fbcd-2a09-4045-b2b2-2c3bee8e9296'),
}

model UpgradeClientResponse = {
  headers?: map[string]string(name='headers'),
  statusCode?: int32(name='statusCode'),
  body?: UpgradeClientResponseBody(name='body'),
}

/**
 * @summary Updates the client (ehpcutil) in a cluster to a new version.
 *
 * @param request UpgradeClientRequest
 * @param runtime runtime options for this request RuntimeOptions
 * @return UpgradeClientResponse
 */
async function upgradeClientWithOptions(request: UpgradeClientRequest, runtime: $RuntimeOptions): UpgradeClientResponse {
  request.validate();
  var query = OpenApiUtil.query(request.toMap());
  var req = new OpenApiUtil.OpenApiRequest{ 
    query = OpenApiUtil.query(query),
  };
  var params = new OpenApiUtil.Params{
    action = 'UpgradeClient',
    version = '2018-04-12',
    protocol = 'HTTPS',
    pathname = '/',
    method = 'GET',
    authType = 'AK',
    style = 'RPC',
    reqBodyType = 'formData',
    bodyType = 'json',
  };
  return callApi(params, req, runtime);
}

/**
 * @summary Updates the client (ehpcutil) in a cluster to a new version.
 *
 * @param request UpgradeClientRequest
 * @return UpgradeClientResponse
 */
async function upgradeClient(request: UpgradeClientRequest): UpgradeClientResponse {
  var runtime = new $RuntimeOptions{};
  return upgradeClientWithOptions(request, runtime);
}

